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

原创 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;
}

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

探索PinYin4j.jar将汉字转换为拼音的基本用法

将汉字转换为拼音在Android开发中是个很常见的问题。例如:在Android手机应用开发中,要查询联系人的姓名,通常都是用拼音进行查询的。 Pinyin4j是一个功能强悍的汉语拼音工具包,是sou...
  • qq_20785431
  • qq_20785431
  • 2016年02月24日 13:58
  • 12809

[pinyin4j] java版汉字转换拼音(大小写)

pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2....
  • ssrc0604hx
  • ssrc0604hx
  • 2014年12月04日 16:13
  • 18118

Java/Android中汉字转拼音的两种方法,优劣比较

常见的两种汉字转拼音的方法,分析和比较
  • afei__
  • afei__
  • 2016年05月25日 22:21
  • 8705

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

http://blog.csdn.net/singleton1900/article/details/22494503
  • o279642707
  • o279642707
  • 2014年06月18日 16:35
  • 815

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

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

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

建一个类放进去,一会用的到。 /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache...
  • ch1406285246
  • ch1406285246
  • 2016年05月16日 16:48
  • 936

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

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

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

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

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

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

安卓中关于对话框的四种写法

单选框public void onClick(View v) { Builder builder = new AlertDialog.Builder(this);// 创建alertDialog对...
  • u013271867
  • u013271867
  • 2016年05月19日 23:58
  • 117
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:安卓中引入第三方汉字转拼音架包的写法及注意事项
举报原因:
原因补充:

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