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這個字符的寬度設為0。
復制代碼 代碼如下:
<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這個字符的寬度設為0。
相關(guān)文章
Android中可以作為Log開關(guān)的一些操作及安全性詳解
Android的調(diào)試好伙伴Log在調(diào)試時非常有用,基本可以看Log而無需單點調(diào)試,尤其對實時大數(shù)據(jù)量的設備調(diào)試尤其有效,下面這篇文章就來給大家詳細介紹關(guān)于Android中可以作為Log開關(guān)的一些操作及安全性的相關(guān)資料,需要的朋友可以參考下。2017-12-12Android 圖像處理(類型轉(zhuǎn)換,比例縮放,倒影,圓角)的小例子
Android 圖像處理(類型轉(zhuǎn)換,比例縮放,倒影,圓角)的小例子,需要的朋友可以參考一下2013-05-05Android SharePreferences與數(shù)據(jù)庫SQLite存儲實現(xiàn)方法介紹
這篇文章主要介紹了Android SharePreferences與數(shù)據(jù)庫SQLite用于存儲的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-09-09Android build.gradle版本名打包配置的方法
這篇文章主要介紹了Android build.gradle版本名打包配置的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-02-02Android Application存取公共數(shù)據(jù)的實例詳解
這篇文章主要介紹了Android Application存取公共數(shù)據(jù)的實例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07