Android 设置TextView自动调整字体大小

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

android_auto_size.gif

有三种设置方式:

  • 默认
  • 粒度
  • 预设大小

1.默认

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

1.1.原生设置

xml设置

代码设置

// 参数: int autoSizeTextTypetextView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);

1.2.兼容库设置

xml设置

代码设置

// 参数: TextView textView, int autoSizeTextTypeTextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);

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

2.粒度

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

2.1.原生设置

xml设置

代码设置

// 参数:int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unittextView.setAutoSizeTextTypeUniformWithConfiguration(30, 50, 2, TypedValue.COMPLEX_UNIT_SP);

2.2.兼容库设置

xml设置

代码设置

// 参数:TextView textView, int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unitTextViewCompat.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设置

    10sp    12sp    20sp    40sp    100sp

代码设置

int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);// 参数:int[] presetSizes, int unittextView.setAutoSizeTextTypeUniformWithPresetSizes(presetSizes, TypedValue.COMPLEX_UNIT_SP);
    10    12    20    40    100

3.2.兼容库设置

xml设置

代码设置

int[] presetSizes = getResources().getIntArray(R.array.auto_size_text_sizes_code);// 参数:TextView textView, int[] presetSizes, int unitTextViewCompat.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的粒度设置

Demo github地址: devblog androidAutoSize
个人博客地址: devbolg

更多相关文章

  1. Android(安卓)应用的欢迎界面实现代码
  2. Android网络架构之———OkHttp+Volley+Gson
  3. android 焦点控制及运用
  4. Android(安卓)view更改背景资源,padding消失的问题
  5. ThreadPoolExecutor 快速实际应用
  6. 简析Android多种AlertDialog对话框效果
  7. Android控件 TimePicker
  8. Android-NDK入门续
  9. Android(安卓)自定义View(四) 时钟clockView

随机推荐

  1. unity-与Android交互(unity5、android st
  2. Android消息机制Handler源码分析
  3. Android自动化测试之环境搭建(二)
  4. Android 4.1源码编译找不到资源文件解决
  5. Android基本组件__文本框和编辑框
  6. Android中RelativeLayout中各个属性的用
  7. Android使用真机无法调试,抱错INSTALL_FAI
  8. Android(安卓)判断imageview角度并旋转
  9. 设置App2sd
  10. Android(Java):Android 事件分发机制