模仿通讯录按字母分类显示,汉字,英文自动按英文字母分类显示,滑动时用气泡显示最上面的汉字首字母提示,右侧字母栏点击快速定位

废话不多说,先上图。

 

本Demo实现了如下功能:

1.根据汉字首字母,自动按英文字母分类显示。

2.滑动时,泡泡显示最上面的汉字首字母提示。

3.右侧字母栏点击快速定位,方便多数据的查找定位。

不足之处:

1.汉字转化得到拼音首字母的时候,我用到了一个pinyin4j-2.5.0.jar包,多音字和某些特殊汉字翻译不准确,如:我发现厦门,它会翻译成shamen,结果首字母变成了s。

   结果我只好特殊处理了,朋友们有好的解决办法的话麻烦分享一下。

好了,废话不说了,上代码,总共3.java文件和3个配置文件。

(1)Main.java

package com.lmj.quickaction;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import com.lmj.quickaction.RightCharacterListView.OnTouchingLetterChangedListener;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

/**
 * @author lmj
 */
public class Main extends Activity implements ListView.OnScrollListener,
  OnItemClickListener, android.view.View.OnClickListener {
 private RightCharacterListView letterListView;
 private Handler handler;
 private DisapearThread disapearThread;
 private int scrollState;
 private ListAdapter listAdapter;
 private ListView listMain;
 private TextView txtOverlay;
 private WindowManager windowManager;

 private String[] stringArr = { "阿拉伯", "阿镇", "阿布", "北京", "北城", "成", "城市",
   "得", "额", "方", "搞", "广州", "黄石", "黄冈", "杭州", "上海", "上饶", "厦门", "深圳",
   "武林", "武林", "武林", "武林", "武林", "武林", "武林", "武林", "武林", "武林", "武林",
   "武林", "武林", "武林", "武林", "武汉", "下午", "责打", "浙江", "浙江", "浙江", "浙江",
   "浙江", "浙江", "浙江", "浙江", "浙江", "浙江", "浙江", "浙江", "浙江", "浙江", "浙江",
   "浙江", "浙江", "浙江", "浙江", "浙江", "浙江" };

 private String[] stringArr3 = new String[0];
 private ArrayList arrayList = new ArrayList();
 private ArrayList arrayList2 = new ArrayList();
 private ArrayList arrayList3 = new ArrayList();
 private Map<String, String> map = new HashMap<String, String>();

 public String converterToPinYin(String chinese) {
  String pinyinString = "";
  char[] charArray = chinese.toCharArray();
  // 根据需要定制输出格式,我用默认的即可
  HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
  try {
   // 遍历数组,ASC码大于128进行转换
   for (int i = 0; i < charArray.length; i++) {
    if (charArray[i] > 128) {
     // charAt(0)取出首字母
     pinyinString += PinyinHelper.toHanyuPinyinStringArray(
       charArray[i], defaultFormat)[0].charAt(0);
    } else {
     pinyinString += charArray[i];
    }
   }
   return pinyinString;
  } catch (BadHanyuPinyinOutputFormatCombination e) {
   e.printStackTrace();
   return null;
  }
 }

 public class LetterListViewListener implements
   OnTouchingLetterChangedListener {

  @Override
  public void onTouchingLetterChanged(final String s) {

   Toast.makeText(Main.this, s, Toast.LENGTH_LONG).show();
   int num = 0;
   for (int i = 0; i < stringArr.length; i++) {
    if ("a".equals(s)) {
     num = 0;
    } else if

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值