Autosizing TextViews
在Android 8.0(API 26)及以上版本中,TextView能自适应文字大小,再也不用担心文字大小适配了,当然,从Support Library 26开始,也提供了低版本的适配,最低到Android 4.0,所以不用担心适配问题。
在XML中使用
如下。所示,autoSizeTextType取值为"none""uniform"代表是否自动缩放,autoSizeMinTextSize代表最小的文字大小,autoSizeMaxTextSize代表最大的文字大小,autoSizeStepGranularity代表当文字自动放大/缩小的时候文字大小变化的大小。
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp" />
当然我们也可以手动指定文字大小变化的区间
define the array in the res/values/arrays.xml file.
<resources>
<array name="autosize_text_sizes">
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform"
android:autoSizePresetSizes="@array/autosize_text_sizes" />
通过代码设置
如下
//TextViewCompat#AUTO_SIZE_TEXT_TYPE_UNIFORM //TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE TextViewCompat.setAutoSizeTextTypeWithDefaults(mBinding.test, TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE);
当然也可以指定最大/最小等
TextViewCompat.setAutoSizeTextTypeWithDefaults(tv,30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
其他
当我们要使用自动缩放的时候,不能给TextView设置singleLine属性,不然会失效
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview