Android ellipsize的小問(wèn)題介紹
更新時(shí)間:2012年11月15日 17:30:18 作者:
使用TextView的時(shí)候,需要長(zhǎng)度過(guò)長(zhǎng)自動(dòng)顯示省略號(hào),android里有原生的支持,本文將針對(duì)此問(wèn)題進(jìn)行深入剖析,需要的朋友可以參考
使用TextView的時(shí)候,需要長(zhǎng)度過(guò)長(zhǎng)自動(dòng)顯示省略號(hào),android里有原生的支持,定義如下:
<TextView ...
android:ellipsize="end"
android:singleLine="true"/>
一看確實(shí)可以使用,但仔細(xì)觀察,發(fā)現(xiàn)在省略號(hào)…的后面有一個(gè)方框,類似于出現(xiàn)亂碼那種字符,這是為什么呢?
原來(lái)android里的ellipsize在處理字符串的時(shí)候,如果發(fā)現(xiàn)字符串超長(zhǎng),便會(huì)把最后一個(gè)字符替換為…,不是三個(gè)點(diǎn),而是字體內(nèi)置的省略號(hào)。不管用什么字體,都需要支持這個(gè)省略號(hào)才能正確顯示。APP使用的字體是Mercedes,它支持省略號(hào)顯示,這里沒(méi)有問(wèn)題。問(wèn)題在于android在處理ellipsize的時(shí)候,把一個(gè)字符替換為…,把剩下截?cái)嗟钠渌址鎿Q為Unicode的字符“ZERO WIDTH NO-BREAK SPACE” (U+FEFF),這個(gè)字符在屏幕上并不會(huì)顯示出來(lái),但它仍是字符串的一部分。
問(wèn)題原來(lái)出在這里,使用的Mercedes字體不支持這個(gè)特殊字符U+FEFF的顯示,所以才會(huì)出現(xiàn)亂碼。解決的方法也很簡(jiǎn)單,編輯字體文件,把U+FEFF這個(gè)字符的寬度設(shè)為0。
復(fù)制代碼 代碼如下:
<TextView ...
android:ellipsize="end"
android:singleLine="true"/>
一看確實(shí)可以使用,但仔細(xì)觀察,發(fā)現(xiàn)在省略號(hào)…的后面有一個(gè)方框,類似于出現(xiàn)亂碼那種字符,這是為什么呢?
原來(lái)android里的ellipsize在處理字符串的時(shí)候,如果發(fā)現(xiàn)字符串超長(zhǎng),便會(huì)把最后一個(gè)字符替換為…,不是三個(gè)點(diǎn),而是字體內(nèi)置的省略號(hào)。不管用什么字體,都需要支持這個(gè)省略號(hào)才能正確顯示。APP使用的字體是Mercedes,它支持省略號(hào)顯示,這里沒(méi)有問(wèn)題。問(wèn)題在于android在處理ellipsize的時(shí)候,把一個(gè)字符替換為…,把剩下截?cái)嗟钠渌址鎿Q為Unicode的字符“ZERO WIDTH NO-BREAK SPACE” (U+FEFF),這個(gè)字符在屏幕上并不會(huì)顯示出來(lái),但它仍是字符串的一部分。
問(wèn)題原來(lái)出在這里,使用的Mercedes字體不支持這個(gè)特殊字符U+FEFF的顯示,所以才會(huì)出現(xiàn)亂碼。解決的方法也很簡(jiǎn)單,編輯字體文件,把U+FEFF這個(gè)字符的寬度設(shè)為0。
相關(guān)文章
Android中可以作為L(zhǎng)og開(kāi)關(guān)的一些操作及安全性詳解
Android的調(diào)試好伙伴L(zhǎng)og在調(diào)試時(shí)非常有用,基本可以看Log而無(wú)需單點(diǎn)調(diào)試,尤其對(duì)實(shí)時(shí)大數(shù)據(jù)量的設(shè)備調(diào)試尤其有效,下面這篇文章就來(lái)給大家詳細(xì)介紹關(guān)于Android中可以作為L(zhǎng)og開(kāi)關(guān)的一些操作及安全性的相關(guān)資料,需要的朋友可以參考下。2017-12-12Android 圖像處理(類型轉(zhuǎn)換,比例縮放,倒影,圓角)的小例子
Android 圖像處理(類型轉(zhuǎn)換,比例縮放,倒影,圓角)的小例子,需要的朋友可以參考一下2013-05-05Android View滑動(dòng)的實(shí)現(xiàn)分析示例
View滑動(dòng)是Android實(shí)現(xiàn)自定義控件的基礎(chǔ),同時(shí)在開(kāi)發(fā)中難免會(huì)遇到View的滑動(dòng)處理,其實(shí)不管是那種滑動(dòng)方法,基本思路是類似的;當(dāng)點(diǎn)擊事件傳到View時(shí),系統(tǒng)記下觸摸點(diǎn)的坐標(biāo),手指移動(dòng)時(shí)系統(tǒng)記下移動(dòng)后的左邊并算出偏移量,通過(guò)偏移量來(lái)修改View的坐標(biāo)2022-08-08Android SharePreferences與數(shù)據(jù)庫(kù)SQLite存儲(chǔ)實(shí)現(xiàn)方法介紹
這篇文章主要介紹了Android SharePreferences與數(shù)據(jù)庫(kù)SQLite用于存儲(chǔ)的具體實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-09-09Android build.gradle版本名打包配置的方法
這篇文章主要介紹了Android build.gradle版本名打包配置的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Android Application存取公共數(shù)據(jù)的實(shí)例詳解
這篇文章主要介紹了Android Application存取公共數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07