Android ellipsize的小問題介紹
更新時間:2012年11月15日 17:30:18 作者:
使用TextView的時候,需要長度過長自動顯示省略號,android里有原生的支持,本文將針對此問題進行深入剖析,需要的朋友可以參考
使用TextView的時候,需要長度過長自動顯示省略號,android里有原生的支持,定義如下:
<TextView ...
android:ellipsize="end"
android:singleLine="true"/>
一看確實可以使用,但仔細觀察,發(fā)現(xiàn)在省略號…的后面有一個方框,類似于出現(xiàn)亂碼那種字符,這是為什么呢?
原來android里的ellipsize在處理字符串的時候,如果發(fā)現(xiàn)字符串超長,便會把最后一個字符替換為…,不是三個點,而是字體內(nèi)置的省略號。不管用什么字體,都需要支持這個省略號才能正確顯示。APP使用的字體是Mercedes,它支持省略號顯示,這里沒有問題。問題在于android在處理ellipsize的時候,把一個字符替換為…,把剩下截斷的其他字符替換為Unicode的字符“ZERO WIDTH NO-BREAK SPACE” (U+FEFF),這個字符在屏幕上并不會顯示出來,但它仍是字符串的一部分。
問題原來出在這里,使用的Mercedes字體不支持這個特殊字符U+FEFF的顯示,所以才會出現(xiàn)亂碼。解決的方法也很簡單,編輯字體文件,把U+FEFF這個字符的寬度設(shè)為0。
復(fù)制代碼 代碼如下:
<TextView ...
android:ellipsize="end"
android:singleLine="true"/>
一看確實可以使用,但仔細觀察,發(fā)現(xiàn)在省略號…的后面有一個方框,類似于出現(xiàn)亂碼那種字符,這是為什么呢?
原來android里的ellipsize在處理字符串的時候,如果發(fā)現(xiàn)字符串超長,便會把最后一個字符替換為…,不是三個點,而是字體內(nèi)置的省略號。不管用什么字體,都需要支持這個省略號才能正確顯示。APP使用的字體是Mercedes,它支持省略號顯示,這里沒有問題。問題在于android在處理ellipsize的時候,把一個字符替換為…,把剩下截斷的其他字符替換為Unicode的字符“ZERO WIDTH NO-BREAK SPACE” (U+FEFF),這個字符在屏幕上并不會顯示出來,但它仍是字符串的一部分。
問題原來出在這里,使用的Mercedes字體不支持這個特殊字符U+FEFF的顯示,所以才會出現(xiàn)亂碼。解決的方法也很簡單,編輯字體文件,把U+FEFF這個字符的寬度設(shè)為0。
相關(guān)文章
Android自定義viewgroup 使用adapter適配數(shù)據(jù)(6)
這篇文章主要為大家詳細介紹了Android自定義viewgroup,使用adapter適配數(shù)據(jù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-12-12
Android使用GPS獲取用戶地理位置并監(jiān)聽位置變化的方法
這篇文章主要介紹了Android使用GPS獲取用戶地理位置并監(jiān)聽位置變化的方法,實例分析了Android編程中GPS定位的實現(xiàn)與使用技巧,需要的朋友可以參考下2015-12-12
Android實現(xiàn)瘋狂連連看游戲之加載界面圖片和實現(xiàn)游戲Activity(四)
這篇文章主要為大家詳細介紹了Android實現(xiàn)瘋狂連連看游戲之加載界面圖片和實現(xiàn)游戲Activity,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Android 桌面Widget開發(fā)要點解析(時間日期Widget)
總的來說,widget主要功能就是顯示一些信息。我們今天編寫一個很簡單的作為widget,顯示時間、日期、星期幾等信息。需要顯示時間信息,那就需要實時更新,一秒或者一分鐘更新一次2013-07-07
Android實戰(zhàn)教程第四十三篇之上拉加載與下拉刷新
這篇文章主要為大家詳細介紹了Android實戰(zhàn)教程第四十三篇之上拉加載與下拉刷新,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11
詳解Android TabHost的多種實現(xiàn)方法 附源碼下載
這篇文章主要為大家詳細介紹了Android TabHost的多種實現(xiàn)方法 文章中針對每一種實現(xiàn)方法都附有源碼進行下載,感興趣的小伙伴們可以參考一下2016-05-05

