Android撥號盤,支持T9搜索和號碼搜索


之前做通訊錄軟件,其中在做撥號盤的時候一直為怎么實現T9輸入煩惱,上網找了很多帖子,都沒有滿意的答案。
不過最后終於是實現了,看社區內好像也有不少朋友需要,在此分享一下。
這個是在我項目中提取出來的撥號盤案例,功能上完全實現了目前其他通訊錄中撥號盤的功能,但在加載效率上還有不足,請各位大俠指教。

有圖有真相:

   

 目前我用1g單核cpu的索愛mt15i的測試機,1500多的聯系人,加載時間大概在8秒左右,當然,一般用戶不會有這么多聯系人的。
由於我做的程序不是在一開始的界面就是撥號盤,所以我在程序已開始就在后台異步加載聯系人,
等到撥號盤的界面,聯系人加載也差不多完成了。
不過我覺得每次在程序開始都讀取聯系人的數據,把他們整理成t9搜索需要的數據有些慢,
最好還是自己建張表來存放,然后監聽聯系人表的變化動態更新t9數據。

如果大家有更好更快的想法,希望能分享一下!

部分代碼:

public class ToPinYin {
    
    /**
     * 將傳遞的漢字list轉換成拼音List
     * @param list
     */
    public static List<String> getPinyinList(List<String> list){
        List<String> pinyinList = new ArrayList<String>();
        for(Iterator<String> i=list.iterator(); i.hasNext();) {
            String str = (String)i.next();
            try {
                String pinyin = getPinYin(str);
                pinyinList.add(pinyin);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
        }
        return pinyinList;
    }
    
    /**
     * 將中文轉換成拼音
     * @param 拼音-漢字
     * @return
     */
    public static String getPinYin(String zhongwen)   
            throws BadHanyuPinyinOutputFormatCombination {   
  
        String zhongWenPinYin = "";   
        char[] chars = zhongwen.toCharArray();   
  
        for (int i = 0; i < chars.length; i++) {   
            String[] pinYin = PinyinHelper.toHanyuPinyinStringArray(chars[i], getDefaultOutputFormat());   
            // 當轉換不是中文字符時,返回null   
            if (pinYin != null) {   
                zhongWenPinYin += pinYin[0];   
            } else {   
                zhongWenPinYin += chars[i];   
            }   
        }   
        return zhongWenPinYin;   
    }   
  
    /**  
     * 輸出格式  
     *   
     * @return  
     */  
    private static HanyuPinyinOutputFormat getDefaultOutputFormat() {   
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();   
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);// 大寫   
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 沒有音調數字   
        format.setVCharType(HanyuPinyinVCharType.WITH_U_AND_COLON);// u顯示   
        return format;   
    }   


源碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM