欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年05月06日 09:59:13   作者:Amter  
這篇文章主要介紹了Android 實(shí)現(xiàn)文字左右對齊效果的方法,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下

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

1. TextView 效果

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

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

2. 對齊原理

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

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

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

比如

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

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

比如

3. 最終方案

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

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

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

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

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

那么最終方案就是:

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

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

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

(1)先遍歷當(dāng)前頁面的字符,將中英文截取為一個(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ì)算出來的每一行的單詞,計(jì)算剩余的距離進(jìn)行繪制;

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

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

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

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

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

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

GitHub源碼地址:

https://github.com/Amterson/AlginProject

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

以上就是Android 實(shí)現(xiàn)文字左右對齊的詳細(xì)內(nèi)容,更多關(guān)于Android 文字左右對齊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解android studio游戲搖桿開發(fā)教程,仿王者榮耀搖桿

    詳解android studio游戲搖桿開發(fā)教程,仿王者榮耀搖桿

    這篇文章主要介紹了android studio游戲搖桿開發(fā)教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Android實(shí)現(xiàn)圖片異步請求加三級(jí)緩存

    Android實(shí)現(xiàn)圖片異步請求加三級(jí)緩存

    這篇文章主要向大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片異步請求加三級(jí)緩存的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Android新建Activity的方法

    Android新建Activity的方法

    這篇文章主要介紹了Android新建Activity的方法,結(jié)合實(shí)例形式分析了Android新建Activity的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-04-04
  • Android中一種效果奇好的混音方法詳解

    Android中一種效果奇好的混音方法詳解

    這篇文章主要給大家介紹了關(guān)于在Android中一種效果奇好的混音方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Android控件拖動(dòng)實(shí)例詳解

    Android控件拖動(dòng)實(shí)例詳解

    這篇文章主要介紹了 Android控件的拖動(dòng)實(shí)例詳解的相關(guān)資料,這里附有實(shí)例代碼,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2016-12-12
  • Android開發(fā)事件處理的代碼如何寫手摸手教程

    Android開發(fā)事件處理的代碼如何寫手摸手教程

    這篇文章主要為大家介紹了Android開發(fā)事件處理的代碼如何寫手摸手教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Android讀取串口數(shù)據(jù)的操作指南

    Android讀取串口數(shù)據(jù)的操作指南

    在Android系統(tǒng)上讀取串口數(shù)據(jù)是一個(gè)常見的需求,特別是當(dāng)我們需要與硬件設(shè)備進(jìn)行通信時(shí),本文給大家介紹了Android讀取串口數(shù)據(jù)的操作指南,文中有詳細(xì)的步驟和代碼示例,幫助你更好地理解和實(shí)現(xiàn)串口通信,需要的朋友可以參考下
    2024-05-05
  • Android 截圖功能源碼的分析

    Android 截圖功能源碼的分析

    這篇文章主要介紹了Android 截圖功能源碼的分析的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • Android實(shí)現(xiàn)自定義曲線圖

    Android實(shí)現(xiàn)自定義曲線圖

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自定義曲線圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • android判斷phonegap是否聯(lián)網(wǎng)且加載super.loadUrl網(wǎng)址

    android判斷phonegap是否聯(lián)網(wǎng)且加載super.loadUrl網(wǎng)址

    android判斷phonegap是否聯(lián)網(wǎng)動(dòng)態(tài)加載super.loadUrl網(wǎng)址,接下來本文所提供的知識(shí)會(huì)幫助你解決以上問題,感興趣的你可不要錯(cuò)過了哈
    2013-02-02

最新評(píng)論