安卓中引入第三方汉字转拼音架包的写法及注意事项

原创 2016年05月30日 22:32:59

在安卓APP编写中经常需要对获取的数据进行排序显示,这就需要我们在获取到数据源后,对数据源进行处理。由于中文不能直接排序,需要借助汉语拼音,于是就有了引入第三方的架包,极大的方便了我们对数据的转换,下面来介绍下应该怎么运用,以及注意事项。

1.将第三方架包下载后导入到我们的项目中lib下,这里我使用的是Eclipse,用安卓studio的方法类似。

2.在代码中的实现,事例如下:

public class PinYinUtil {
/**
* 返回汉语拼音格式的内容
* "北京",返回"BEIJING"
* "单" 
* @param name
* @return
*/
public static String getPinYin(String name){
String result="";
try {
//使用pinyin4将汉字转拼音步骤
//1)设定好拼音的格式
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
//2)调用一个静态方法按照第一步设定的格式进行转换
StringBuilder sb = new StringBuilder();
for(int i=0;i<name.length();i++){
//做汉字转拼音之前要做一个判断,看一下当前要转换的字符串是不是汉字,否则直接转换会报错

//例如:汉字中间带一些特殊字符,是不能够识别的
String string = name.substring(i,i+1);

//这里应用了正则表达式,对是否是汉字进行判断,汉字的Unicode编码范围为\u4E00-\u9FFF
if(string.matches("[\u4E00-\u9FFF]")){
//"DAN","SHAN"这里需要注意多音字的处理,这里暂且选择了数组中下标为零的那个汉语拼音
String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(name.charAt(i), format);
sb.append(pinyin[0]);
}else{
sb.append(string);
}
}
result = sb.toString();
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return result;
}

}

这段代码中需要注意的一共有两点:

1.做汉字转拼音之前要做一个判断,否则如果数据中的汉字如果包含一些特殊符号等运行会报错。

2.注意正则表达式的写法,以及汉字在Unicode中的编码范围。


在activity的刷新方法中对转换后的汉字进行字典排序:

private void refresh() {
HttpUtil.getCities(new Listener<String>() {


@Override
public void onResponse(String arg0) {
Gson gson = new Gson();
CityBean cityBean = gson.fromJson(arg0, CityBean.class);
List<String> list = cityBean.getCities();
//原始服务器返回的内容中,包含"全国",将其去掉
list.remove("全国");
List<CitynameBean> citynames = new ArrayList<CitynameBean>();
//Log.d("TAG",list.toString());
for (int i = 0; i <list.size(); i++) {
String cityname = list.get(i);//“北京”
CitynameBean bean = new CitynameBean();
bean.setCityName(cityname);
bean.setPyName(PinYinUtil.getPinYin(cityname));
bean.setSortLetter(bean.getPyName().charAt(0));
citynames.add(bean);
}
//对citynames要按照城市名称的拼音进行字典顺序排序
Collections.sort(citynames, new Comparator<CitynameBean>() {


@Override
public int compare(CitynameBean lhs, CitynameBean rhs) {
return lhs.getPyName().compareTo(rhs.getPyName());
}
});

//适配器
adapter.addAll(citynames, true);



}

});

}


对排序后在搜索框中搜索排序是否显示的注意事项:

在设置适配器数据源时,首先做一个判断:

CitynameBean bean = getItem(position);
vh.tvSortLetter.setText(String.valueOf(bean.getSortLetter()));
vh.tvCityname.setText(bean.getCityName());

if(getPositionForSection(getSectionForPosition(position))==position){
vh.tvSortLetter.setVisibility(View.VISIBLE);
}else{
vh.tvSortLetter.setVisibility(View.GONE);
}

return convertView;

这个判断语句中的getPositionForSection(),以及getSectionForPosition(),在使用时,首先要让activity实现一个(implements) SectionIndexer接口,以及重写对应的方法:

@Override
public int getPositionForSection(int section) {
//参数中所代表的分组信息的起始位置是在哪儿

for(int i=0;i<getCount();i++){
CitynameBean bean = getItem(i);
if(bean.getSortLetter()==section){
return i;
}
}
return -1;
}


@Override
public int getSectionForPosition(int position) {
// 数据源中,第position位置的数据,应该是属于哪一个分组
CitynameBean bean = getItem(position);
return bean.getSortLetter();
}


@Override
public Object[] getSections() {
// TODO Auto-generated method stub
return null;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

安卓中 选择器属性的使用,注意事项

http://blog.csdn.net/singleton1900/article/details/22494503

安卓中引入第三方架包butterKnife的操作方法以及使用Intent创建选择窗口和通过handler发消息实时更新textview中的时间

一:butterknife的引入及使用 annotation(注解)简介 注解是JDK5.0开始的新增特性。为代码添加一句特殊的"说明",添加了注解的代码会引起编译器的“格外重视” 系统提供了一些注解...

Android带参字串的写法注意事项

  • 2017年04月06日 11:34
  • 310KB
  • 下载

安卓汉字转拼音字符串,进行模糊搜索时使用

建一个类放进去,一会用的到。 /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache...

安卓中关于点击响应事件的四种写法(电话拨号器)

安卓中点击响应事件主要是用button响应事件,关于响应事件的大概有四种写法 1,,创建一个内部类,定义点击事件 2,创建一个匿名内部类,直接实现接口 3,让activity实现点击事件的接口(...
  • hll174
  • hll174
  • 2015年04月28日 21:04
  • 859

安卓中自定义view控件代替radiogroup实现颜色渐变效果的写法

利用自定义控件代替radiogroup,同时实现在使用viewpager进行翻页的时候,实现颜色渐变的效果。 一: 首先创建一个自定义view类继承自View类,所有的控件均用canvas绘制出来...

C++builder中使用第三方Delphi安装包注意事项

二、编译安装问题(以EhLib为例) C++builder使用最新版EhLib库出现的问题 1.DBGridEh.hpp(2950): E2040 Declaration terminated inc...

[转]多操作系统平台协同开发时 GIT 的注意事项: 不同操作系统中的换行符(不要使用git的换行符自动转换功能,并且,尽可能保证代码的换行符都是unix); 避免使用第三方插件(如 EGit );

PS: 最好的解决方案是执行以下步骤:(比如,有一个 git 库叫做 mygitrepo) 1)增加 .gitattribute 文件 在mygitrepo 下建立一个 .gitattribute...

汉字转拼音c#写法

  • 2014年08月12日 16:07
  • 7KB
  • 下载

Android 拼音转汉字的第三方处理

一、前言 在我们的开发中,有时会有这样的需求,就是联系人列表按照拼音顺序排列(如通讯录)。于是,我也在网上搜到了许多这类的文章,就两种最常见的做法在此进行简单的比较和分析 二、汉字转拼音的方法 使用第...
  • wanniu
  • wanniu
  • 2017年03月23日 10:54
  • 323
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓中引入第三方汉字转拼音架包的写法及注意事项
举报原因:
原因补充:

(最多只允许输入30个字)