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