想实现安卓市场这个效果,开始想通过调用android的本地化功能实现:

[java] view plain copy print ?
  1. omparatorcmp=Collator.getInstance(java.util.Locale.CHINA);
  2. Arrays.sort(names,cmp);


这个可以实现简单的汉字排序功能,按 汉字拼音的第一个字母的英文字母顺序排序,这个真正用起来不太灵活,特别是对比较的不是集合对象本身,而是集合对象的一个字段的情况下,这种方法就比较麻烦了,于是重写类实现 Comparator接口

[java] view plain copy print ?
  1. publicclassCollatorComparatorimplementsComparator{
  2. Collatorcollator=Collator.getInstance();
  3. publicintcompare(Objectelement1,Objectelement2){
  4. CollationKeykey1=collator
  5. .getCollationKey(((AppInfo)element1).appName);
  6. CollationKeykey2=collator
  7. .getCollationKey(((AppInfo)element2).appName);
  8. returnkey1.compareTo(key2);
  9. }
  10. }

通过: [java] view plain copy print ?
  1. List<AppInfo>Softpacks=newArrayList<AppInfo>();
  2. Collections.sort(Softpacks,newCollatorComparator());


实现以AppInfo类的appName对象作为排序字段,这样使用起来就比较灵活了。可以顺利实现汉字的排序。

这时想实现在显示的item上按 A,B,C分隔开显示,这时就要找出汉字的拼音 或者 拼音的第一个字母,查找下网上的资料,有这个相关的第三方jar包 ,pinyin4j-2.5.0.jar

下载过来 :

[java] view plain copy print ?
  1. importnet.sourceforge.pinyin4j.PinyinHelper;
  2. importnet.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
  3. importnet.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
  4. importnet.sourceforge.pinyin4j.format.HanyuPinyinToneType;
  5. importnet.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
  6. /**
  7. *汉字转换位汉语拼音,英文字符不变
  8. *@authorxuke
  9. *
  10. */
  11. publicclassCn2Spell{
  12. /**
  13. *汉字转换位汉语拼音首字母,英文字符不变
  14. *@paramchines汉字
  15. *@return拼音
  16. */
  17. publicstaticStringconverterToFirstSpell(Stringchines){
  18. StringpinyinName="";
  19. char[]nameChar=chines.toCharArray();
  20. HanyuPinyinOutputFormatdefaultFormat=newHanyuPinyinOutputFormat();
  21. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  22. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  23. for(inti=0;i<nameChar.length;i++){
  24. if(nameChar[i]>128){
  25. try{
  26. pinyinName+=PinyinHelper.toHanyuPinyinStringArray(nameChar[i],defaultFormat)[0].charAt(0);
  27. }catch(BadHanyuPinyinOutputFormatCombinatione){
  28. e.printStackTrace();
  29. }
  30. }else{
  31. pinyinName+=nameChar[i];
  32. }
  33. }
  34. returnpinyinName;
  35. }
  36. /**
  37. *汉字转换位汉语拼音,英文字符不变
  38. *@paramchines汉字
  39. *@return拼音
  40. */
  41. publicstaticStringconverterToSpell(Stringchines){
  42. StringpinyinName="";
  43. char[]nameChar=chines.toCharArray();
  44. HanyuPinyinOutputFormatdefaultFormat=newHanyuPinyinOutputFormat();
  45. defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
  46. defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
  47. for(inti=0;i<nameChar.length;i++){
  48. if(nameChar[i]>128){
  49. try{
  50. pinyinName+=PinyinHelper.toHanyuPinyinStringArray(nameChar[i],defaultFormat)[0];
  51. }catch(BadHanyuPinyinOutputFormatCombinatione){
  52. e.printStackTrace();
  53. }
  54. }else{
  55. pinyinName+=nameChar[i];
  56. }
  57. }
  58. returnpinyinName;
  59. }
  60. }


通过调用converterToFirstSpell(String chines)方法,获得汉字拼音的首字母,顺利实现上述功能

虽然可以顺利实现,但是通过引用第三方jar包,在android里也算是重量级实现了,于是想能不能不通过第三方pinyin4j-2.5.0.jar包实现这个功能

通过网上搜寻,发现android2.2版本以后,数据库里有汉字联系人时,也有一个字段是存储汉字拼音的,也就是说 当你保存中文姓名联系人时,系统会调用一个方法把中文联系人转成拼音存储起来 ,于是想能不能找到系统调用的这个方法,通过这个方法实现汉字转换拼音的功能。网上看了下 有人已经追踪过此方面的源码:地址。

http://blog.csdn.net/csuhanyong/article/details/6120935

有时间在追踪下,先记录到这。


转自:http://blog.csdn.net/socketsyuhai/article/details/6834709

更多相关文章

  1. Android(安卓)Studio 微信分享功能(包括可以分享到朋友圈,分享到朋
  2. Android实现双击TitleBar回顶部的功能示例代码
  3. android 自定义LabelView实现各类小标签,重要功能已标注
  4. Android实现中文按拼音排序方法
  5. 利用OpenGL ES、手机传感器、相机和调用百度语音包服务,实现AR+语
  6. Android关闭USB的ADB调试和文件传输功能(禁用USB)
  7. Android(安卓)代码自动提示功能
  8. android格式化手机号的功能
  9. Unity实战篇:实现安卓手机的复制粘贴功能(与原生Android交互)

随机推荐

  1. Android NDK会带来什么,除去你对NDK的一些
  2. Android自动化工具Monkeyrunner使用(五)
  3. Android中Activity的四种启动模式详解
  4. Android Binder
  5. 安卓017ListView & GridView & ScrollView
  6. Android必备:Android Activity的生命周期
  7. Android日志输出单元测试Debug
  8. Android锁定横竖屏、splash,全屏、去除标
  9. Android TextView 中如何使用第三方字体
  10. Windows平台下搭建Android原生C/C++开发