亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Android 實現文字左右對齊

瀏覽:2日期:2022-09-19 08:02:32

這里會涉及到實現原理的解析,如果只是需要使用輪子,請拉到最底下;

1. TextView 效果

首先,讓我們先來看一下TextView的顯示效果:

Android 實現文字左右對齊

中文情況下還好,但是英文情況下的顯示效果就不是很好看了,右邊會留了很長的空白,對于追求用戶體驗的,這樣的顯示效果肯定是不能滿足的;但是TextView內部也沒有提供API給我們,那么就只能自己來實現了;

2. 對齊原理

原理:將一行剩余的寬度平分給當前單詞的間距,這樣來達到左右對齊的效果;那么我們就有兩種實現方案:

(1)TextView繪制一行的計算原理簡單粗暴,就是計算這一行顯示不下一個單詞的時候,就進行回車換行;TextView已經手動給我們計算出了一行能顯示多少的字符,那么我們只需要通過計算剩余的寬度再進行繪制即可;

會存在問題:如果一行存在單詞較少的情況,就會出現間隔過大的問題;

比如

Android 實現文字左右對齊

(2)通過手動計算一行能顯示多少個字符,然后再計算剩余的寬度進行繪制;這樣只是比第一步多了個自己計算一行能顯示多少個字符的操作;

但是這樣也會存在問題:如果單詞存在中英文混合,或者非中文的情況,會很大概率出現換行時單詞被截斷的問題;

比如

Android 實現文字左右對齊

3. 最終方案

以上兩種方案都會存在缺陷,那這樣的話我們就得對出現的問題提出解決方案;

當前市場上有成熟的閱讀軟件,最常用的就是左右對齊的排版效果,來看看當前的閱讀軟件是怎么解決這些問題的;

先看一下微信讀書app的顯示效果:

Android 實現文字左右對齊

再看一下掌閱app的顯示效果:

Android 實現文字左右對齊

微信讀書和掌閱都是對這個過長的單詞進行截斷處理,然后使用“-”符號將這兩個截斷的單詞連接起來,再進行繪制時就不會出現上述兩種方案的問題;

那么最終方案就是:

通過手動計算一行能顯示多少個單詞,如果一行最后一個單詞顯示不下,則進行截斷處理,中文則不不存在該問題,這里針對非中文的處理;然后再根據剩余空間進行繪制;

那么有了方案之后,接下來看看具體要怎么實現;

4. 最終實現

(1)先遍歷當前頁面的字符,將中英文截取為一個個單詞,具體實現在getWordList(String text)方法里面;通過遍歷當前的字符,判斷如果為中文時,則為一個單詞,非中文時則通過遍歷該英文單詞進行拼接,最后拼成一個非中文單詞;

(2)通過遍歷當前的單詞,計算每一行要顯示的單詞集合,具體實現在getLineList(List<String> frontList)這個方法里面;遍歷單詞時,當添加最后一個單詞時,寬度已經超過一行顯示的距離,那么就判斷最后一個單詞是否為中文,是的話則添加到下一行,否則的話則進行截斷處理;

(3)通過第二步計算出來的每一行的單詞,計算剩余的距離進行繪制;

Android 實現文字左右對齊

5. 優化點

(1)代碼里修改了繪制的邏輯后,那么關于TextView的一些基礎屬性也要進行適配;比如布局的方向,可以使用TextView自帶的屬性來進行設置;通過android:gravity=''和android:textAlignment=''屬性來定義布局的文字方向,是居左還是居右邊,這兩個屬性都可以進行設置,textAlignment屬性的優先級比較高,如果同時設置的話,那么則以textAlignment屬性為準;

<com.example.testdemo1.XQJustifyTextViewandroid:layout_width='match_parent'android:layout_height='wrap_content'android:layout_margin='10dp'android:textSize='16sp'android:gravity='start'android:textAlignment='textStart'/>

(2)對于實現的英文單詞截斷的效果,還有優化的地方,經過一些小伙伴的提醒,發現還可以通過音節的進行拆分,再去研究了一波微信讀書和掌閱的截斷效果,發現確實是使用了音節來進行截斷,這樣展示效果就更加完美了;

后面研究了一波資料后,發現可以通過元音來進行截斷,英語單詞的元音有5個,分別是a,e,i,o,u; 那么就可以通過元音加一個輔音的規則來進行截斷;比如an,en之類的;這里只實現了一種規則來進行截斷,其他的規則過于復雜,暫時沒有引入;

看一下優化后的效果:

Android 實現文字左右對齊

GitHub源碼地址:

https://github.com/Amterson/AlginProject

到這里就結束啦。

以上就是Android 實現文字左右對齊的詳細內容,更多關于Android 文字左右對齊的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 日韩亚洲精品不卡在线 | 亚洲福利社 | 视频在线一区二区三区 | 在线不卡一区二区三区日韩 | 成人国内精品久久久久影院 | 国产欧美综合在线观看第七页 | 亚洲综合天堂网 | 99在线精品国产不卡在线观看 | 成人免费福利视频在线观看 | 免费精品久久久视频 | 日本高清不卡二区 | 国产日产欧产麻豆精品精品推荐 | 亚洲精品久 | 日韩在线视频中文字幕 | 国产三区视频在线观看 | 国产一级做a爰片在线看 | 国产精品二 | 免费黄色在线视频 | 欧美亚洲国产视频 | 国产一级爱片在线播放 | 国产精品一区不卡 | 亚洲国产m3u8在线观看 | 日韩在线免费看 | 欧美一级毛片免费观看视频 | 在线欧美三级 | 成人看片黄a在线看 | 亚洲精品高清在线 | 视频二区肥岳精品推荐 | 国产合集福利视频在线视频 | 无遮挡一级毛片私人影院 | 97超视频在线观看 | 在线看成品视频入口免 | 成人免费国产gav视频在线 | www.黄色网| 亚洲美女一级片 | 97视频福利 | 国产在亚洲线视频观看 | 欧美成人交tv免费观看 | 国语对白清晰好大好白在线 | 男女爱爱激情视频在线观看 | 国产亚洲精品一区二区在线播放 |