日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android 實(shí)現(xiàn)文字左右對(duì)齊

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

這里會(huì)涉及到實(shí)現(xiàn)原理的解析,如果只是需要使用輪子,請(qǐng)拉到最底下;

1. TextView 效果

首先,讓我們先來(lái)看一下TextView的顯示效果:

Android 實(shí)現(xiàn)文字左右對(duì)齊

中文情況下還好,但是英文情況下的顯示效果就不是很好看了,右邊會(huì)留了很長(zhǎng)的空白,對(duì)于追求用戶體驗(yàn)的,這樣的顯示效果肯定是不能滿足的;但是TextView內(nèi)部也沒有提供API給我們,那么就只能自己來(lái)實(shí)現(xiàn)了;

2. 對(duì)齊原理

原理:將一行剩余的寬度平分給當(dāng)前單詞的間距,這樣來(lái)達(dá)到左右對(duì)齊的效果;那么我們就有兩種實(shí)現(xiàn)方案:

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

會(huì)存在問題:如果一行存在單詞較少的情況,就會(huì)出現(xiàn)間隔過大的問題;

比如

Android 實(shí)現(xiàn)文字左右對(duì)齊

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

但是這樣也會(huì)存在問題:如果單詞存在中英文混合,或者非中文的情況,會(huì)很大概率出現(xiàn)換行時(shí)單詞被截?cái)嗟膯栴};

比如

Android 實(shí)現(xiàn)文字左右對(duì)齊

3. 最終方案

以上兩種方案都會(huì)存在缺陷,那這樣的話我們就得對(duì)出現(xiàn)的問題提出解決方案;

當(dāng)前市場(chǎng)上有成熟的閱讀軟件,最常用的就是左右對(duì)齊的排版效果,來(lái)看看當(dāng)前的閱讀軟件是怎么解決這些問題的;

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

Android 實(shí)現(xiàn)文字左右對(duì)齊

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

Android 實(shí)現(xiàn)文字左右對(duì)齊

微信讀書和掌閱都是對(duì)這個(gè)過長(zhǎng)的單詞進(jìn)行截?cái)嗵幚恚缓笫褂谩?”符號(hào)將這兩個(gè)截?cái)嗟膯卧~連接起來(lái),再進(jìn)行繪制時(shí)就不會(huì)出現(xiàn)上述兩種方案的問題;

那么最終方案就是:

通過手動(dòng)計(jì)算一行能顯示多少個(gè)單詞,如果一行最后一個(gè)單詞顯示不下,則進(jìn)行截?cái)嗵幚恚形膭t不不存在該問題,這里針對(duì)非中文的處理;然后再根據(jù)剩余空間進(jìn)行繪制;

那么有了方案之后,接下來(lái)看看具體要怎么實(shí)現(xiàn);

4. 最終實(shí)現(xiàn)

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

(2)通過遍歷當(dāng)前的單詞,計(jì)算每一行要顯示的單詞集合,具體實(shí)現(xiàn)在getLineList(List<String> frontList)這個(gè)方法里面;遍歷單詞時(shí),當(dāng)添加最后一個(gè)單詞時(shí),寬度已經(jīng)超過一行顯示的距離,那么就判斷最后一個(gè)單詞是否為中文,是的話則添加到下一行,否則的話則進(jìn)行截?cái)嗵幚恚?/p>

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

Android 實(shí)現(xiàn)文字左右對(duì)齊

5. 優(yōu)化點(diǎn)

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

<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)對(duì)于實(shí)現(xiàn)的英文單詞截?cái)嗟男Ч€有優(yōu)化的地方,經(jīng)過一些小伙伴的提醒,發(fā)現(xiàn)還可以通過音節(jié)的進(jìn)行拆分,再去研究了一波微信讀書和掌閱的截?cái)嘈Чl(fā)現(xiàn)確實(shí)是使用了音節(jié)來(lái)進(jìn)行截?cái)啵@樣展示效果就更加完美了;

后面研究了一波資料后,發(fā)現(xiàn)可以通過元音來(lái)進(jìn)行截?cái)啵⒄Z(yǔ)單詞的元音有5個(gè),分別是a,e,i,o,u; 那么就可以通過元音加一個(gè)輔音的規(guī)則來(lái)進(jìn)行截?cái)啵槐热鏰n,en之類的;這里只實(shí)現(xiàn)了一種規(guī)則來(lái)進(jìn)行截?cái)啵渌囊?guī)則過于復(fù)雜,暫時(shí)沒有引入;

看一下優(yōu)化后的效果:

Android 實(shí)現(xiàn)文字左右對(duì)齊

GitHub源碼地址:

https://github.com/Amterson/AlginProject

到這里就結(jié)束啦。

以上就是Android 實(shí)現(xiàn)文字左右對(duì)齊的詳細(xì)內(nèi)容,更多關(guān)于Android 文字左右對(duì)齊的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产高潮在线| 国产精品伊人| 日韩精品看片| 狠狠久久伊人| 日本精品另类| 日韩一区二区三区精品| 日韩午夜在线| 天堂va蜜桃一区二区三区| 免费成人网www| 成人久久久久| 久久精品91| 99精品小视频| 性一交一乱一区二区洋洋av| 日本韩国欧美超级黄在线观看| 国产一区二区三区网| jizzjizz中国精品麻豆| 精品三区视频| 国产一区二区三区探花| 欧美69视频| 亚洲一级淫片| 国产精品毛片一区二区三区| 在线视频亚洲欧美中文| 日韩影院在线观看| 久久av影视| 五月天久久网站| 久久国产中文字幕| 日韩国产一区二| 激情欧美一区| 欧美国产精品| 性感美女一区二区在线观看| 黄色亚洲在线| 欧美久久一区二区三区| 国产成人免费精品| 日韩欧美1区| 91成人精品视频| 视频在线观看国产精品| 欧美视频二区| 私拍精品福利视频在线一区| 欧美另类综合| 午夜久久av| 久久99久久久精品欧美| 久久精品亚洲人成影院| 欧美精品99| 99久久婷婷| 国产精品日韩精品中文字幕| 久久久国产亚洲精品| 久久精品xxxxx| 欧美亚洲精品在线| 国产精品亚洲二区| 三级精品视频| 国产精品s色| 亚洲精品一区二区在线看| 日韩精品福利一区二区三区| 在线日韩av| 日韩国产欧美| 国产亚洲高清一区| 婷婷六月综合| 国产欧美一区二区三区精品酒店| 亚洲专区欧美专区| 久久亚洲黄色| 国产精品手机在线播放| 午夜在线精品偷拍| 欧美aa在线观看| 蜜桃av一区二区| 日韩天堂在线| 欧美精品自拍| 在线亚洲观看| 国产精品成人自拍| 亚洲九九精品| 婷婷综合一区| 国精品一区二区三区| 麻豆精品视频在线| 日韩专区欧美专区| 香蕉久久99| 亚洲午夜av| 91精品电影| 日韩中文字幕一区二区三区| 免费欧美日韩| 国产精品美女久久久| 欧美一级精品| 激情久久五月| 伊人久久亚洲影院| 免费久久精品| 免费中文字幕日韩欧美| 中文一区一区三区免费在线观| 亚洲伊人精品酒店| 日韩三级视频| 精品一区二区三区中文字幕| 亚洲一级特黄| 日本va欧美va瓶| 88久久精品| 日本国产一区| 国产高清视频一区二区| 亚洲欧洲美洲av| 欧美日韩国产高清电影| 亚洲少妇一区| 亚洲精品自拍| 黄在线观看免费网站ktv| 日韩欧美一区二区三区在线观看| 国产视频一区欧美| 日本在线成人| 欧美黄色一区| 久久福利一区| 久久五月天小说| 三上悠亚国产精品一区二区三区| 亚洲精品看片| 亚洲三级毛片| 亚洲精品**中文毛片| 欧美激情一区| 亚洲自拍另类| 精品一区二区三区免费看| 欧美激情麻豆| 水蜜桃久久夜色精品一区| 国产精品久久久久久av公交车| 日本不卡一区二区三区| 日韩1区2区日韩1区2区| 日韩激情一二三区| 六月天综合网| 国产精品美女久久久浪潮软件| 国产精品99免费看| 亚洲成人三区| 亚洲欧美日韩精品一区二区 | 黄色成人91| 亚洲女同中文字幕| 亚洲专区一区| 免费在线观看一区二区三区| 日韩午夜黄色| 亚洲免费一区三区| 日本va欧美va欧美va精品| 国产精品欧美三级在线观看| 精品国产中文字幕第一页| 97se综合| 免费不卡在线观看| 精品视频在线你懂得| 亚洲激情社区| 亚洲女同一区| 亚洲精品综合| 久久国产三级| 国产精成人品2018| 国内一区二区三区| 日韩欧美中文| 亚洲深夜av| 日韩av网站免费在线| 日本一不卡视频| 欧美精品中文| 综合日韩av| 一区二区亚洲精品| 婷婷综合国产| 精品亚洲a∨| 欧美影院三区| 一区二区三区四区日韩| 91麻豆精品激情在线观看最新 | 天堂√8在线中文| 欧美日韩高清| 日韩av网站免费在线| 久久gogo国模啪啪裸体| 性感美女一区二区在线观看| 视频一区视频二区在线观看| 欧美天堂在线| 久久精品一区二区不卡| 首页欧美精品中文字幕| 国产欧美精品久久| 久久国产电影| 国产欧美一级| 狠狠爱成人网| 精品中文在线| 亚洲乱码视频| 亚洲黄色免费看| 日韩高清一区| 欧美国产91| 精品三级在线观看视频| 先锋亚洲精品| 99精品在线免费在线观看| 久久国产生活片100| 久久精品国产www456c0m| 97久久中文字幕| 免费欧美在线视频| 亚洲伊人av| 国产精品qvod| 日本少妇一区二区| 精品一区三区| 丝袜美腿一区| 大香伊人久久精品一区二区 | 国产成人精品免费视| 丝袜美腿成人在线| 91国语精品自产拍| 麻豆理论在线观看| 欧美激情综合| 欧美国产另类| 国产精品一国产精品k频道56| 石原莉奈在线亚洲三区| 久久激情中文| 91精品99| 午夜在线播放视频欧美| 亚洲韩日在线| 亚洲天堂成人| 亚洲天堂久久| 在线日韩一区| 亚洲成人免费| 亚洲欧美伊人|