简评: 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"/>
你也能够使用这行代码在 Java/Kotlin 执行此操做ui
TextViewCompat.setAutoSizeTextTypeWithDefaults(myTextView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
若是在 XML 文件中设置了自动调整大小,则不建议将该值"wrap_content"
用于layout_width
或layout_height
的某个属性TextView
。code
根据须要,还有两种方法能够调整文本大小:orm
此模式下,经过设置最小值和最大值来肯定一个文本大小变化范围,而后设置一个变化粒度值,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% 的大小?