废话不多说,先上图。
本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