首先说明汉字转拼音:
一、使用Android自带的HanziToPinyin.java文件
该文件我一直找不到只能去下载了:http://www.grepcode.com/search/?query=HanziToPinyin
利用该类主要实现以下两种方法:
1、获取汉字全拼
public String getFullPinYin(String source){
if (!Arrays.asList(Collator.getAvailableLocales()).contains(Locale.CHINA)) {
return source;
}
ArrayList<Token> tokens = HanziToPinyin.getInstance().get(source);
if (tokens == null || tokens.size() == 0) {
return source;
}
StringBuffer result = new StringBuffer();
for (Token token : tokens) {
if (token.type == Token.PINYIN) {
result.append(token.target);
} else {
result.append(token.source);
}
}
return result.toString();
}
2、获取汉字首字母
public String getFirstPinYin(String source){
if (!Arrays.asList(Collator.getAvailableLocales()).contains(Locale.CHINA)) {
return source;
}
ArrayList<Token> tokens = HanziToPinyin.getInstance().get(source);
if (tokens == null || tokens.size() == 0) {
return source;
}
StringBuffer result = new StringBuffer();
for (Token token : tokens) {
if (token.type == Token.PINYIN) {
result.append(token.target.charAt(0));
} else {
result.append("#");
}
}
return result.toString();
}
这种方式会将汉字转拼音的同时,会将英文转成“#”。
二、使用pinyin4j将汉字转成拼音
第三方jar包下载地址:http://sourceforge.net/projects/pinyin4j/
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
/**
* 拼音帮助类
*/
public class PinyinUtils {
/**
* 将字符串中的中文转化为拼音,其他字符不变
* 花花大神->huahuadashen
* @param inputString
* @return
*/
public static String getPingYin(String inputString) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
char[] input = inputString.trim().toCharArray();
String output = "";
try {
for (char curchar : input) {
if (java.lang.Character.toString(curchar).matches(
"[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
curchar, format);
output += temp[0];
} else
output += java.lang.Character.toString(curchar);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return output;
}
/**
* 汉字转换为汉语拼音首字母,英文字符不变
* 花花大神->hhds
* @param chines
* 汉字
* @return 拼音
*/
public static String getFirstSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (char curchar : arr) {
if (curchar > 128) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(curchar, defaultFormat);
if (temp != null) {
pybf.append(temp[0].charAt(0));
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(curchar);
}
}
return pybf.toString().replaceAll("\\W", "").trim();
}
}
输入框监听实时显示
这里使用EditText(不使用:AutoCompleteTextView、searchView):
<EditText
android:id="@+id/et_search_input"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="2dp"
android:layout_marginTop="3dp"
android:layout_marginBottom="3dp"
android:layout_weight="1"
android:drawableLeft="@drawable/search_ico_n"
android:drawablePadding="4dp"
android:background="@drawable/input_text_gray"
android:hint="@string/search"
android:singleLine="true"
android:textSize="@dimen/text_size_16" />
对输入框进行实时监听:
/** 搜索输入框 */
final EditText etSearch = (EditText) findViewById(R.id.et_search_input);
etSearch.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count)
{
// 获取输入的内容
String inputStr = etSearch.getText().toString().trim();
if (!inputStr.isEmpty())
{
if (inputStr.matches("[\\u4E00-\\u9FA5]+"))
{
// 搜索数据含有汉字
// 直接进行汉字搜索
inputChinese = true;
doSearch(inputStr);
} else
{
// 进行拼音搜索
doSearch(inputStr.toLowerCase());
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after)
{
}
@Override
public void afterTextChanged(Editable s)
{
}
});
在doSearch()进行搜索匹配(比如字符串可用indexOf()判断是否含有该字段)和更新搜索结果列表