android搜索框實時顯示 |中文轉拼音

首先說明漢字轉拼音:

一、使用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()判斷是否含有該字段)和更新搜索結果列表


發佈了37 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章