Android之開源類庫Pinyin4j的使用----搜尋連絡人
Pinyin4j只能算是Java開源類庫,但是在Android的應用開發中也經常被用到。大家都用過手機的通訊錄,通訊錄的搜尋連絡人的功能,用pinyin4j就可以實現。下面我給大家帶來這個例子,使用pinyin4j實現搜尋連絡人功能。
首先先對pinyin4j做一個簡單的介紹:
pinyin4j是一個流行的Java庫,支援中文字元和拼音之間的轉換,拼音的輸出格式也可以定製,並且支援漢字的多音字。pinyin4j的官方網是:http://pinyin4j.sourceforge.net/
pinyin4j的使用手冊,百度文庫裡有一個文檔,大家要是想詳細瞭解pinyin4j的使用,請點擊pinyin4j的使用手冊。
再繼續講之前,還是先帶大家看一下本案例的:
接下來咱們看一下工程目錄:
本案例總共就兩個類,其中PinyinTool是一個工具類,其代碼如下:
package com.gc.testcontactpeopledemo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sourceforge.pinyin4j.PinyinHelper;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;/** * * @author Android將軍 * */public class PinyinTool {public static HanyuPinyinOutputFormat format;public static List>> list;public static Map> map;public static Map pMap;public static List strList;/** * 功能:根據連絡人姓名產生拼音縮寫與拼字全寫 * @param strList 儲存連絡人姓名的List * @throws BadHanyuPinyinOutputFormatCombination */public static void setData(List strList) throws BadHanyuPinyinOutputFormatCombination{PinyinTool.strList=strList;format=new HanyuPinyinOutputFormat();format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);list=new ArrayList>>();for(int i=0;i>(); pMap=new HashMap(); pMap.put("simple", getSimple(strList.get(i))); pMap.put("complex", getComplex(strList.get(i))); map.put(strList.get(i), pMap); list.add(map);}}/** * 功能:擷取字串str的拼音縮寫 * @param str * @return */public static String getSimple(String str){StringBuilder sb=new StringBuilder();String tempSimple=null;for(int i=0;i search(String str){List temp=new ArrayList();for(int i=0;i下面再給出MainActivity的代碼,如下:
package com.gc.testcontactpeopledemo;import java.util.ArrayList;import java.util.List;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.text.Editable;import android.text.TextWatcher;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;/** * * 功能:搜尋連絡人功能 * @author Android將軍 * */public class MainActivity extends Activity implements TextWatcher {private EditText mEditText;private ListView mListView;private PinyinHelper mPinyinHelper;private MyAdapter mMyAdapter;private List mList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); setData(); initUI(); setListeners(); } /** * 初始化連絡人資料 */ public void setData() { mList=new ArrayList(); mList.add("安徽"); mList.add("王小二"); mList.add("Android將軍"); mList.add("天津大麻花"); mList.add("馬場道"); mList.add("海河灣"); mList.add("五大道"); mList.add("蘇州道"); mList.add("愛國道"); mList.add("天津圖書大廈"); } /** * 初始化組件 */ public void initUI() { mEditText=(EditText)findViewById(R.id.search); mListView=(ListView)findViewById(R.id.listview); mMyAdapter=new MyAdapter(); mListView.setAdapter(mMyAdapter); try {PinyinTool.setData(mList);} catch (BadHanyuPinyinOutputFormatCombination e) {// TODO Auto-generated catch blocke.printStackTrace();} } /** * 設定監聽 */ public void setListeners() { mEditText.addTextChangedListener(this); } /** * EditText監聽事件,提供搜尋功能 */@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {for(int i=0;i
由於代碼比較簡單再加上有部分注釋,故在此就不做過多的解釋了,如果還有不明白處,回複留言即可。轉載請註明出處:http://blog.csdn.net/android_jiangjun/article/details/40422251