1. 程式人生 > >Android 聯絡人名字多音字的處理方法

Android 聯絡人名字多音字的處理方法

正文

Android在處理多音字的時候使用的是HanziToPinyin.java這個類,該轉換類實現了讀入漢字的unicode碼轉換及對應Pinyin的sortKey生成。

當輸入的是中文的時候就會進入這個轉換類進行soryKey的生成。我們發現【沈】在其分析時候被認作了【chen】進行處理,檢視字典發現【沈】是個多音字,也有【chen】的讀音,只是我們不常用到【chen】這個讀音,但是android在對應unicode碼時加入了這個多音字的對映,且如果有兩個讀音,會自動匹配到首字母在前面的讀音。

如:【調】à【diao】而不是【tiao】

      【單】à【dan】而不是【shan】

而2.3的處理中【沈】à【shen】, 【單】à【dan】,HanziToPinyin.java與4.0卻是一致的,由此可見,4.0對於漢字的處理相對於2.3並沒有發生變化,而是4.0將不常用的多音字也加入了進來,字型檔比2.3更全。

這個問題對於google來說應該不算是問題,對於多音字的支援是google在字型檔上面的更全面的增加,它不會關心多音字是否常用。

解決辦法:
若需要修改這個對應關係,我們提供一個解決方法去修改名子的sortKey。
方法如下:

在HanziToPinyin.java其中添加了一個specialCharacters變數,是個unicode碼對應的map.
然後在下面的gettoken方法裡面來判斷輸入的字元是否是自己定義的多音字字元。如果是,那麼將多音字強行指向指定的讀音下面。

如:沈--〉審

    賈--〉甲

    俞--〉於

目前有三個不常見的多音字的被加入到了Map中,後續如再發現不常用的多音字,按照如上方式加入到map中即可。

程式碼片段如下:

public static Map<String,Character> specialHanzi = new HashMap<String,Character>();

   

    static {

                                // A

                                // B

                                // C

                                // D

                                // E

                                // F

                                // G

                                // H

                                // I

                                // J

                specialHanzi.put("8d3e", '\u7532');//賈->甲

                                // K

                                // L

                                // M

                                // N

                                // O

                                // P

                                // Q

                                // R

                                // S

                specialHanzi.put("6c88", '\u5ba1');//沈->審

                                // T

                                // U

                                // V

                                // W

                                // X

                                // Y

                specialHanzi.put("4fde", '\u4e8e');//俞->於

                                // Z

    }

首先定義這個map,

    private Token getToken(char character) {

                if (specialHanzi.get(Integer.toHexString(character)) != null) {

                                character = specialHanzi.get(Integer.toHexString(character));

                }

在private Token getToken(char character) 方法的起始部分加入這句判斷語句。

 


相關推薦

Android 聯絡人名字多音字處理方法

正文 Android在處理多音字的時候使用的是HanziToPinyin.java這個類,該轉換類實現了讀入漢字的unicode碼轉換及對應Pinyin的sortKey生成。 當輸入的是中文的時候就會進入這個轉換類進行soryKey的生成。我們發現【沈】在其分析時候

幾個Android常見wraning警告處理方法

寫Android專案時應力求專案中沒有warning警告,本文羅列幾個常見的Android warning警告資訊及可用的解決方法。1.  replace "-" with an "en dash" character (–, &#8211;)     解決方法:直接

Android開發之布局文件裏實現OnClick事件關聯處理方法

intent dsm nbsp ext 關聯 you vertica findview 時間 一般監聽OnClickListener事件,我們都是通過Button button = (Button)findViewById(....); button.se

android sdk manager 更新異常 處理方法

  一   修改hosts   ,     127.0.0.1 localhost #Google主頁 203.208.46.146 www.goog

Android 實現事件監聽器的五種處理方法

在Android 應用開發過程中,常用監聽事件如下: (1) ListView事件監聽 setOn ItemSelectedListener:滑鼠滾動時觸發 setOnItemClickListener: 點選時觸發 (2 )EditText 事件監聽 setOnKeyListe

adb 指令uninstall解除安裝android app 處理方法

正常思路,想當然,兩句指令搞定應該沒啥毛病。 adb unstall ImageGrabber.apk adb install ImageGrabber.apk 問題來了,報錯Unknown package: ImageGrabber.apk Exception occ

Android 控制元件多次點選處理方法

描述 在開發Android App時有時給控制元件沒有設定selector,此時當手機反應稍微緩慢一點會使使用者感覺自己點選沒有反應,因此會連著點選多次,但是這會是伺服器壓力增大,做一些重複操作。因此,在此記錄一下防止應用在短時間內多次點選加大伺服器壓力的解決方法 一、在點選事件

Android 軟體盤彈出時把view頂上去的處理方法

現象如圖: 解決方法: 一 、在清單檔案裡對應的activity中: 1> 加入:android:windowSoftInputMode="adjustPan",這樣軟鍵盤彈出時會直接覆蓋view 2> 加入:android:windowSoftInputMode="state

Android端影象處理方法總結

Android端影象處理方法 在Android機中進行影象處理,常用的方式有兩種: 一種是單純使用JAVA語言進行圖形處理,相當於你將C或者C++編寫的影象處理方法,又重新用JAVA編寫了一遍。這種開發方法需要你在opencv官網,首先下載好Opencv的Android的版本,然後將它

Android應用程式簽名打包,混淆程式碼時報錯的處理方法

看了很多關於如何解決android應用程式打包出錯的帖子,試用之後,發現並不能完全解決我所遇到的問題。糾結了幾天,終於解決了我所遇到的問題,現將處理方法寫出來以備自己日後查閱,也為遇到相同問題的朋友提供一點思路。 在我的程式中使用到了ksoap2.jar,關於這個Jar包

Android Studio v4,v7,v13包相容問題,專案同時匯入v7、v13包處理方法

最近在做個AS專案,同時用到了v7包和v13包,但是匯入包的時候出錯,提示兩種錯誤:一種是包重複,一種如下: Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android

關於android圖示美工設計尺寸與處理方法

最近兩個專案都找了美工做的圖示,關於尺寸方面,由於美工都是按px畫素來設計,而我們程式裡一般都使用dp來使影象有更好的適應,所以為了統一標準也琢磨了挺久,為了防止以後忘了再研究(已經忘了一次了),特此記錄。 我們的美工圖示設計是按1080P設計的,1920*1

android button背景圖片不拉伸的一種處理方法

一般來說UI給的圖片比例應該和控制元件是正好符合的,但是實際操作過程中會發現可能不符合的情況,比例不對直接設定background的話background會被拉伸,這個時候一般來說如果能像ImageView一樣設定scaleType為centerCrop或者center就好了

Android 中 Activity的記憶體洩漏,原因以及處理方法

文章參考: 八個造成 Android 應用記憶體洩露的原因 Android記憶體洩漏產生的原因以及解決方案OOM android 常見記憶體洩漏原因及解決辦法 記憶體洩漏,說的更直白點,就是你想讓一個物件在下次GC的時候徹底被回收,但是呢,這個物件所處的

Android BottomSheetDialog消失後再次無法顯示的處理方法

在使用BottomSheetDialog滑動消失後,再次點選顯示的時候,沒有成功顯示,BottomSheetBehavior被設定成了隱藏模式,需要在dismiss()的監聽中重新設定下狀態就可以了Vi

input,textarea在ios和Android上陰影和邊框的處理方法

1.去掉ios上陰影的方法只需要在css檔案上新增input,textarea{-webkit-appearance: none;}就可以了 2.在移動端上input和textarea邊框問題,也是在css上新增outline: none;就可以完美解決。

Android 文字動態處理方法,TextView動態賦值。

publicvoid DynamicSetTextTool(int stringId, Object changeText, int viewId) {// 動態文字工具方法         String RefreshTime = getResources().ge

android文字元件textView屬性autolink設定為web,顯示網址的處理方法

/** 匹配網址正則表示式*/ private static final String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL = "(?:" + "(?:aero|arpa|asia|a[cdefgilmnoqrs

Android事件處理方法總結-Handler訊息處理

一、Android中的事件處理方法 事件處理:響應使用者UI動作,提高應用程式互動性 1、基於監聽的事件處理機制 2、基於回撥的事件處理機制 3、Handler訊息處理 二、Handler訊息傳遞機制詳解 1、為什麼要使用Handler訊息傳遞     1).Andr

Android 自定義View的post(Runnable)方法非100%執行的原因和處理方法解析

最近在寫一個需求,需要在view.post(Runnable)方法當中進行一些操作。但是實際使用中(特定場景)發現並不靠譜。 現象 如果呼叫了view的post(Runnable)方法,該Runnable在View處於detached狀態期間並不會執行;只有當此View或