Android | 自動調整文本大小的 TextViews

簡評: Auto-Sizing TextViews —— 當 TextView 的佈局邊界尺寸發生變化時,文本大小能夠跟着自動縮放調整。android

有時候咱們須要 TextView 根據放入的內容來改變其文本大小,以前 Android 對此並無太多的支持,在 Android O 以後,新增了這項功能。讓咱們看看是怎麼一回事 ~數組

首先,在 build.gradle 文件中添加 v26 支持庫或更高的版本。app

implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:support-v4:26.1.0'

經過使用支持庫,此功能能夠兼容 Android 4.0 及更高的版本。而後添加一個 TextView:佈局

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:text="Hello Any Small Text Goes Here"/>

如今在 TextView 中添加 app:autoSizeTextType="uniform":gradle

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    app:autoSizeTextType="uniform"
    android:text="Hello Any Small Text Goes Here"/>

普通 TextView 和 自動調整大小的 TextView

你也能夠使用這行代碼在 Java/Kotlin 執行此操做ui

TextViewCompat.setAutoSizeTextTypeWithDefaults(myTextView, 
TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

若是在 XML 文件中設置了自動調整大小,則不建議將該值"wrap_content"用於layout_widthlayout_height的某個屬性TextViewcode

根據須要,還有兩種方法能夠調整文本大小:orm

  1. Granularity(粒度型)
  2. Preset Sizes(預置大小型)

粒度型

此模式下,經過設置最小值和最大值來肯定一個文本大小變化範圍,而後設置一個變化粒度值,TextView 就可以以該粒度值爲增減變量,在變化範圍內動態縮放文本大小。xml

在 XML 中,能夠這樣完成:blog

app:autoSizeMaxTextSize=」100sp」 
    app:autoSizeMinTextSize=」12sp」 
    app:autoSizeStepGranularity=」2sp」 
    app:autoSizeText=」uniform」

在 Java/Kotlin,能夠經過調用如下方法來實現:

TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(TextView textview, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit); 

// Example
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(myTextView, 12, 100, 2, TypedValue.COMPLEX_UNIT_SP);

預置大小

TextView 能夠根據預置的值自動調整文本大小。

在 XML 中,使用 autoSizePresetSizesautoSizePresetSizes佈局文件中的屬性

android:autoSizeText=」uniform」 
    android:autoSizePresetSizes=」@array/autosize_text_sizes」

要將數組做爲資源訪問,在 res/values/arrays.xml 文件中定義數組

<array name=」autosize_text_sizes」> 
    <item>10sp</item> 
    <item>12sp</item> 
    <item>20sp</item> 
    <item>40sp</item> 
    <item>100sp</item> 
</array>

在 Java/Kotlin 能夠這樣實現:

TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit);

// Example
int[] sizes = getContext().getResources().getIntArray(R.array.autosize_text_sizes)
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(myTextView, sizes, TypedValue.COMPLEX_UNIT_SP);

關於 Auto-Sizing TextViews 就先介紹到這裏 ~


原文連接:Auto-Sizing TextViews in Android
推薦閱讀:怎樣減小 Android 應用包 60% 的大小?

相關文章
相關標籤/搜索