android通过拼音搜索中文的功能实现代码
好几年没写博客了,很多知识不记是真的会忘记,以后还是保持写博客的习惯吧。坚持不一定成功,但放弃一定很舒服!(开玩笑(#^.^#))
回归正题,今天我要记录的是拼音搜索功能,我记得16年的时候做过这个功能。现在已经忘记很多细节了,所以这次好好写一写!
第一步:准备
- 第三方包——中文转拼音,pinyin4j-2.5.0.jar,官网http://pinyin4j.sourceforge.net/
- filterable.java 过滤接口
第二步:分析功能并实现
- 很明显,这是两个功能,一个是中文转拼音,一个是查询过滤
- 下面我们先实现主要功能,查询过滤
- 创建布局文件 activity_main.xml,实现如下:
就一个搜索框和列表控件
接着创建列表适配器 searchadapter.java,实现了过滤器类filterable
这段代码,重点是searchfilter类的两个方法
- performfiltering(charsequence constraint) 接收输入数据,在这个方法实现处理逻辑
- publishresults(charsequence constraint, filterresults results) 接收过滤后的结果
注意点:originallist 这个集合是用来保存原有数据的。因为list会随着搜索结果而变化,我们每次的过滤都是需要用到原有的数据。
适配器写好了,下面看看怎么使用它
一顿recyclerview的常规操作
这里需要注意的是这段代码 adapter.getfilter().filter(etsearchname.gettext().tostring().trim()); 这里就调用了我们写好的过滤器。
到此,我们的搜索过滤功能已经实现了。
看看运行效果:
接下来说说中文转拼音
首先需要修改数据源类型
- 之前的数据源只是string集合,现在加了拼音,那就不能只用string了。建个实体username,字段有pinyin和name;
- 通过pinyin4j.jar包把中文转成拼音,然后保存到username集合,代码如下:
pinyinhelper类有很多转换的方法,我选择了tohanyupinyinstringarray,将单个字符转成拼音
值得注意的是,hanyupinyinoutputformat类,可以用你输出不同的拼音格式
settonetype 设置音标的显示方式:
hanyupinyintonetype.with_tone_mark:在拼音字母上显示音标,如“zhòng”
hanyupinyintonetype.with_tone_number:在拼音字符串后面通过数字显示,如“zhong4”
hanyupinyintonetype.without_tone:不显示音标
setcasetype 设置拼音大小写:
hanyupinyincasetype.lowercase:返回的拼音为小写字母
hanyupinyincasetype.uppercase:返回的拼音为大写字母
setvchartype 设置拼音字母“ü”的显示方式
汉语拼音中的“ü”不能简单的通过英文来表示,所以需要单独定义“ü”的显示格式
hanyupinyinvchartype.with_u_unicode:默认的显示方式,输出“ü”
hanyupinyinvchartype.with_v:输出“v”
hanyupinyinvchartype.with_u_and_colon:输出“u:”
所以过滤的判断需要改一下,代码如下:
看看运行效果:
总结:
这个拼音搜索功能还有待改进
1、拼音搜索的准确性,比如王重阳(wangzhongyang,wangchongyang)其实应该有两种读音,但是我现在项目只做了一种。
后续有时间再补吧,项目地址:https://github.com/tongtian00/custonsearch
到此这篇关于android通过拼音搜索中文的功能实现代码的文章就介绍到这了,更多相关android搜索中文内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!