赞
踩
意为:TextView字体大小随着控件的大小变化而变化,Android 8.0(API26)新增,但兼容库 com.android.support:appcompat-v7:26.0.0
版本以上已完全兼容到 API14
android_auto_size.gif
有三种设置方式:
允许TextView
在水平轴和垂直轴上均匀地自动调整刻度。
xml设置
- <TextView
- android:layout_width="match_parent"
- android:layout_height="200dp"
- android:autoSizeTextType="uniform" />
代码设置
- // 参数: int autoSizeTextType
- textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);
xml设置
- <TextView
- android:layout_width="match_parent"
- android:layout_height="200dp"
- app:autoSizeTextType="uniform" />
代码设置
- // 参数: TextView textView, int autoSizeTextType
- TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
参数介绍:autoSizeTextType
:none: 关闭自动调整功能;uniform: 均匀缩放水平轴和垂直轴
允许TextView
在MinTextSize
-MaxTextSize
之间按StepGranularity
的值为增量或减量来跳动。
xml设置
- <TextView
- android:layout_width="match_parent"
- android:layout_height="200dp"
- android:autoSizeMaxTextSize="50sp"
- android:autoSizeMinTextSize="30sp"
- android:autoSizeStepGranularity="2sp"
- android:autoSizeTextType="uniform"/>
代码设置
- // 参数:int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
- textView.setAutoSizeTextTypeUniformWithConfiguration(30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
xml设置
- <TextView
- android:layout_width="match_parent"
- android:layout_height="200dp"
- app:autoSizeMaxTextSize="50sp"
- app:autoSizeMinTextSize="30sp"
- app:autoSizeStepGranularity="2sp"
- app:autoSizeTextType="uniform" />
代码设置
- // 参数:TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit
- TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView, 30, 50, 2, TypedValue.COMPLEX_UNIT_SP);
参数介绍:autoSizeMaxTextSize
:最大值autoSizeMinTextSize
:最小值autoSizeStepGranularity
:粒度值,即每次增量或减量的值
总结:
1.粒度xml设置时必须设置
autoSizeTextType="uniform"
,代码设置setAutoSizeTextTypeUniformWithConfiguration
时则已设置
2.默认设置其实minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度设置
允许TextView
设置自动调整字体大小跳动时所选的值 。
xml设置
- <TextView
- android:layout_width="match_parent"
- android:layout_height="200dp"
- android:autoSizePresetSizes="@array/auto_size_text_sizes"
- android:autoSizeTextType="uniform"/>
- <array name="auto_size_text_sizes">
- <item>10sp</item>
- <item>12sp</item>
- <item>20sp</item>
- <item>40sp</item>
- <item>100sp</item>
- </array>
代码设置
- int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
- // 参数:int[] presetSizes, int unit
- textView.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, TypedValue.COMPLEX_UNIT_SP);
- <array name="auto_size_text_sizes_code">
- <item>10</item>
- <item>12</item>
- <item>20</item>
- <item>40</item>
- <item>100</item>
- </array>
xml设置
- <TextView
- android:layout_width="match_parent"
- android:layout_height="200dp"
- app:autoSizePresetSizes="@array/auto_size_text_sizes"
- app:autoSizeTextType="uniform" />
代码设置
- int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);
- // 参数:TextView textView, int[] presetSizes, int unit
- TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(textView, presetSizes, TypedValue.COMPLEX_UNIT_SP);
参数介绍:autoSizePresetSizes
:预设大小的数组,建议放到res/values/arrays.xml文件里
总结:
1.预设大小xml设置时可以不设置
autoSizeTextType="uniform"
,xml设置autoSizePresetSizes
和代码设置setAutoSizeTextTypeUniformWithPresetSizes
时都已判断如果autoSizePresetSizes
数组的size>0则设置autoSizeTextType="uniform"
2.默认设置其实minTextSize = 12sp、maxTextSize = 112sp、granularity = 1px的粒度设置
注意事项:
1:要设置android:maxLines="n",n可以是任意值,不一定是1,目的就是让其发挥作用,不能用android:singleLine="true";
2:该功能只针对已经存在的TextView的text有效,如果你setText()或append()后改变了text,则改变后不会自适应;
因此在调用setText()或append()后,要重新通过代码调用TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration()方法,例如:
- private void appendText(String text){
- tvCurrentFocus.append(text);
- //自适应大小-只针对已存在的内容生效,改变内容后需要重新设置,因此。。。
- TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(tvCurrentAnswer, 4, 31, 2, TypedValue.COMPLEX_UNIT_SP);
- }
3:一定要使用AppCompatTextView,不要使用TextView,上面例子中虽然用了TextView,请忽略;
4:建议使用兼容包的;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。