TextView使用autoSizeTextType自动调整字体大小适应固定宽

注意看最下面的注意事项

 

意为:TextView字体大小随着控件的大小变化而变化,Android 8.0(API26)新增,但兼容库 com.android.support:appcompat-v7:26.0.0版本以上已完全兼容到 API14

TextView使用autoSizeTextType自动调整字体大小适应固定宽_第1张图片

android_auto_size.gif

 

有三种设置方式:

  • 默认
  • 粒度
  • 预设大小

1.默认

允许TextView在水平轴和垂直轴上均匀地自动调整刻度。

1.1.原生设置

xml设置

 
  1. android:layout_width="match_parent"

  2. android:layout_height="200dp"

  3. android:autoSizeTextType="uniform" />

代码设置

 
  1. // 参数: int autoSizeTextType

  2. textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);

1.2.兼容库设置

xml设置

 
  1. android:layout_width="match_parent"

  2. android:layout_height="200dp"

  3. app:autoSizeTextType="uniform" />

代码设置

 
  1. // 参数: TextView textView, int autoSizeTextType

  2. TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

参数介绍:
autoSizeTextTypenone: 关闭自动调整功能;uniform: 均匀缩放水平轴和垂直轴

2.粒度

允许TextViewMinTextSize-MaxTextSize之间按StepGranularity的值为增量或减量来跳动。

2.1.原生设置

xml设置

 
  1. android:layout_width="match_parent"

  2. android:layout_height="200dp"

  3. android:autoSizeMaxTextSize="50sp"

  4. android:autoSizeMinTextSize="30sp"

  5. android:autoSizeStepGranularity="2sp"

  6. android:autoSizeTextType="uniform"/>

代码设置

 
  1. // 参数:int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit

  2. textView.setAutoSizeTextTypeUniformWithConfiguration(30, 50, 2, TypedValue.COMPLEX_UNIT_SP);

2.2.兼容库设置

xml设置

 
  1. android:layout_width="match_parent"

  2. android:layout_height="200dp"

  3. app:autoSizeMaxTextSize="50sp"

  4. app:autoSizeMinTextSize="30sp"

  5. app:autoSizeStepGranularity="2sp"

  6. app:autoSizeTextType="uniform" />

代码设置

 
  1. // 参数:TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit

  2. 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的粒度设置

3.预设大小

允许TextView设置自动调整字体大小跳动时所选的值 。

3.1.原生设置

xml设置

 
  1. android:layout_width="match_parent"

  2. android:layout_height="200dp"

  3. android:autoSizePresetSizes="@array/auto_size_text_sizes"

  4. android:autoSizeTextType="uniform"/>

 
  1. 10sp

  2. 12sp

  3. 20sp

  4. 40sp

  5. 100sp

代码设置

 
  1. int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);

  2. // 参数:int[] presetSizes, int unit

  3. textView.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, TypedValue.COMPLEX_UNIT_SP);

 
  1. 10

  2. 12

  3. 20

  4. 40

  5. 100

3.2.兼容库设置

xml设置

 
  1. android:layout_width="match_parent"

  2. android:layout_height="200dp"

  3. app:autoSizePresetSizes="@array/auto_size_text_sizes"

  4. app:autoSizeTextType="uniform" />

代码设置

 
  1. int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);

  2. // 参数:TextView textView, int[] presetSizes, int unit

  3. 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()方法,例如:

 
  1. private void appendText(String text){

  2. tvCurrentFocus.append(text);

  3. //自适应大小-只针对已存在的内容生效,改变内容后需要重新设置,因此。。。

  4. TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(tvCurrentAnswer, 4, 31, 2, TypedValue.COMPLEX_UNIT_SP);

  5. }

3:一定要使用AppCompatTextView,不要使用TextView,上面例子中虽然用了TextView,请忽略;

4:建议使用兼容包的;

你可能感兴趣的:(TextView使用autoSizeTextType自动调整字体大小适应固定宽)