[Android]TextView實現分散對齊(左右對齊)

來源:互聯網
上載者:User

TextView是個特別基礎的Android控制項,只要有文本基本就少不了它。但是最近在項目開發的過程中我發現TextView存在很多局限性,其中最令我頭疼的就是TextView文本排版方面的問題。我們都知道在word中文字對齊有靠左、靠右、置中、分散對齊等,但是TextView中就偏偏沒有分散對齊這個屬性設定。這就導致了TextView中一段文字會出現右邊參差不齊的問題,中文由於每個字等寬看起來還不是特別糟糕,英文看起來就比較過分了。

為瞭解決這個問題,一個常用的解決方案是在TextView內使用html來實現文本樣式的設定,或者乾脆放棄TextView而使用WebView來實現。但是,凡事都應該敢於解決問題,而不是迴避問題,我相信即使僅用TextView一樣是可以實現,後來我發現stackoverflow上有個回答提供了一種思路,我按照這種思路果然實現了TextView文本的分散對齊。原地址連結如下:http://stackoverflow.com/questions/8644649/full-text-justification-in-android/17807828#17807828,原回答有點問題,導致沒人點贊,虧我還能發現它。

以下是我的實現過程:

MainActivity中:

Display display == =mArticleTextView.setLineSpacing(0f, 1.5f8*()width/mArticleTextView.setText("TextView需要顯示的常值內容"

首先設定TextView的顯示字型大小和常值內容,這裡設定字型大小根據螢幕尺寸調整。然後調用自訂的類Textustification中的justify方法來實現TextView的分散對齊,兩個參數分別是TextView控制項以及控制項的寬度。

自訂的類TextJustification內容如下:

    justify(TextView textView, == ""=<String> paraList =  ArrayList<String>=( i = 0; i<paraList.size(); i++<String> lineList== TextUtils.join(" ", lineList).replaceFirst("\\s*", ""+= tempText.replaceFirst("\\s*", "") + "\n"      ArrayList<String><String> paraList =  ArrayList<String>= text.split("\\n+"      ArrayList<String> lineBreak(String text, Paint paint, =text.split("\\s"<String> lineList =  ArrayList<String>=""(paint.measureText(myText+" "+word)<==myText+" "+ totalSpacesToInsert=()((contentWidth-paint.measureText(myText))/paint.measureText(" "=      String justifyLine(String text,=text.split("\\s"=" "((totalSpacesToInsert)>=(wordArray.length-1=toAppend+" "=totalSpacesToInsert-(wordArray.length-1 i=0=""(i<=justifiedText+word+" "+=justifiedText+word+++

這個類完成了TextView內部文字的排版工作,主要分3個步驟:
1、將一篇文章按段落分成若干段(如果只有一段可以略去該步驟);

2、將每一段的文字拆分成各個單詞,然後根據控制項長度確定每一行最多可以填入的單詞數,並且算出排滿該行還需要填入幾個空格。

3、填入空格。

注意代碼中用到了一些Regex進行文章內容操作,若不清楚可以自行搜尋含義。

 

這樣就完成了TextView內部文字分散對齊的排版過程。總結一下,這樣操作還是有點蛋疼的,雖然不算複雜,但還是對常值內容進行了完全的重新處理;並且僅是使用了已有的文本和空格數來實現對齊,並不是嚴格的分散對齊。但不管怎麼說,終究是用TextView自身的操作來實現了,並且效果還算不錯。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.