利用Android源码,轻松实现汉字转拼音功能

今天和大家分享一个从Android系统源代码提取出来的汉字转成拼音实现方案,只要一个类,560多行代码就可以让你轻松实现汉字转成拼音的功能,且无需其他任何第三方依赖。

需求场景

实际开发过程中需要用到实现汉字转成拼音的场景比较常见,如:通讯录里的联系人字母导航栏,为没有设置头像的用户生成一个名字首字母的头像,国家(省份、城市)字母导航栏,搜索关键字转换成拼音等。

实现方案

Android平台上将汉字转换成为拼音已经有一些开源的第三方实现方案,如pinyin4j和TinyPinyin

pinyin4j:https://sourceforge.net/projects/pinyin4j
TinyPinyin:https://github.com/promeG/TinyPinyin

以上这两个实现方案,都需要引入不少类以及一些相应的编码文件,这里和大家介绍一个比上面两个方案还要精简的实现方案,只要560行代码且无需依赖于其他任何编文件的实现。这个类是从Android系统通讯录源码中提取的,类名为HanziToPinyin,其类文件路径如下:

/packages/providers/ContactsProvider/src/com/android/providers/contacts/HanziToPinyin.java

这是一个很独立的类,需要使用的项目直接拷贝到自己对应的工程里面即可使用,需要注意的是,我是在Android 4.2.2的系统源码中拷贝出来的,为什么选择4.2.2,一个是4.2.2之后(4.3开始)的HanziToPinyin不再可以独立使用,需要依赖于Transliterator,而这个类我们是无法直接引用的。

而Android 2.x的HanziToPinyin在测试了很多转换的结果发现是错误的,所以选择了最后一个可以采纳使用的版本Android 4.2.2。

如何使用

HanziToPinyin这个类的代码量非常少,结构也非常简单

下面简单的说明一下如何使用,非常简单,只需要把需要转换的汉字传入get方法即可获取返回的拼音结果

其返回的数据结构是一个HanziToPinyin.Token的ArrayList,HanziToPinyin.Token是HanziToPinyin中的一个公共静态外部类,

top Created with Sketch.