簡體   English   中英

TextView中的統一文本環繞

[英]Uniform text wrapping in TextView

我需要在TextView中使用漂亮的文本包裝,尤其是標題中的文本。

TextView的文本換行可能如下所示,最后一個單詞在新行中:

| ========================= |
|          =====            |

我想要的是包裝寬度更均勻的地方:

|     ================      |
|      ==============       |

可以很容易地為一種語言添加'\\ n'並在不同的屏幕尺寸上測試它,但在有超過10種翻譯時則不能。

我修改了TextView並創建了UniformTextView。 在調查TextView源代碼后,我決定將TextView的寬度最小化,以獲得首選的行號。

    <pl.dziobas.uniformtextview.UniformTextView
        android:text="@string/sample_text"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        app:prefLineNumber="2"
        style="@style/sample_style" />

它對我來說是令人滿意的。
UniformTextView示例

來源可在github上找到

您可以在字符串資源xml中添加'\\ n'來添加換行符,以便您可以自行管理換行。

另一種方法是動態添加'\\ n',你得到字符串長度除以2並在任一方向搜索下一個空格,在第一個找到你只需添加'\\ n'。 一個黑客,但可能工作。

除此之外,在Android中沒有太多用於連字符或排版的內容。 這篇文章可能會給你一些提示: http//smarter-than-the-average-pierre.blogspot.co.at/2011/10/bad-android-typography-tale-of-text.html

Github AutoFittextViewBitBucket AutoScaletextView中有一個開源項目。

您可以根據您的要求進行更改。

我嘗試了AutoScaleTextview並到達了下面的OutPut

在此輸入圖像描述

希望這會幫助你。

該算法大致是:

  1. 計算String寬度(使用Paint.measureText或其他東西)
  2. 如果它小於容器( TextView )寬度,只需使用它
  3. 否則按容器划分String寬度以知道要輸入多少"\\n"
  4. 使用一些搜索算法查找最接近寬度的1 / n的空格字符(如果字體不是等寬measureText則再次使用measureText
  5. 在該點處的子串並且對於n-1(n> 1)重復點4

可能需要進行一些調整,比如使用容器寬度比實際小一些小。

如果您事先知道文本是什么(我的意思是它是硬編碼文本),您可以在dp中修復TextView的寬度,以便它正確包裝,否則您也可以使用android:ems來修復最大數量一行中的字符。 所以你的TextView可以是:

<TextView
   android:layout_height="wrap_content"
   android:layout_width="100dp"
   android:lines="2"/>

要么

  <TextView
     android:layout_height="wrap_content"
     android:layout_width="wrap_content"
     android:ems="15"
     android:lines="2" />

我希望這有幫助!

查看Android自己的TextTextSizing for TextView ,添加API 26和支持庫,支持從API 14開始支持app:autoSizeTextType="uniform"

玩得開心!

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM