Android 8.0 允许根据TextView的内容和边界自动缩放文本内容
实现方式:
1、兼容方式:低版本机器可以支持显示
2、Android8自带Api实现:Androi8以上机器才支持显示
一、兼容方式实现:
1.1、添加依赖:
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:support-v4:26.1.0'
TextView的autoSize采用v7包适配,需要版本号26.1.0以上
(具体参考https://developer.android.com/reference/android/support/v4/widget/TextViewCompat.html)
如果出现:
Error:Failed to resolve: com.android.support:appcompat-v7:26.1.0
在项目中build.gradle:加入maven就可以解决
allprojects {
repositories {
maven { url "https://maven.google.com" } //加这句
jcenter()
}
}
1.2、代码实现:
在xml中使用TextView:
然后代码实现:
private void initAutoTextView(TextView textView) {
/**
* android:autoSizeTextType="uniform"
* the type of auto-size. Must be one of
* none: 关闭缩放功能
* uniform: 垂直方向与水平方向缩放
* 26.1.0 版本才支持
*/
TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM);
/**
* 参数一: 被设置的TextView
* 参数二: 自动缩放的最小字号
* 参数三: 自动缩放的最大字号
* 参数四: 参数二与参数三所用的单位,指定为SP
*/
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(textView,
12, 48, 2, TypedValue.COMPLEX_UNIT_SP);
/**
* 参数一:
* 参数二: 设置多个预制字体大小,这样在缩放时字体会根据预制的字体大小而缩放
* 参数三: 参数二里面的Int值对应的单位,指定为SP
*/
int[] autoTextSize = getResources().getIntArray(R.array.auto_text_sizes);
TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(textView, autoTextSize, TypedValue.COMPLEX_UNIT_SP);
}
ps:auto_text_sizes里面的值不需要带单位
<array name="auto_text_sizes">
<item>12</item>
<item>18</item>
<item>20</item>
<item>32</item>
<item>42</item>
</array>
1.3、xml实现
固定高宽情况下,输入的字体自适应这个高宽
<!-- 兼容方式实现-->
<android.support.v7.widget.AppCompatTextView
android:id="@+id/actv_auto_size"
android:layout_width="200dp"
android:layout_height="100dp"
android:maxLines="3"
android:ellipsize="end"
android:text="哈哈哈哈哈666666"
android:background="@android:color/darker_gray"
app:autoSizeTextType="uniform"
android:layout_margin="20dp"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp"
app:autoSizePresetSizes="@array/preset_sizes"
/>
ps:这里需要带单位
<array name="preset_sizes">
<item>12sp</item>
<item>24sp</item>
<item>36sp</item>
<item>48sp</item>
<item>60sp</item>
<item>72sp</item>
<item>84sp</item>
</array>
这里设置字体sp
二、Android8自带Api实现
2.1、代码实现:
@RequiresApi(api = Build.VERSION_CODES.O)
private void initAndroid8TextView(TextView textView) {
textView.setAutoSizeTextTypeWithDefaults(TextView.AUTO_SIZE_TEXT_TYPE_UNIFORM);
textView.setAutoSizeTextTypeUniformWithConfiguration(10,100,2,TypedValue.COMPLEX_UNIT_SP);
int[] autoTextSize = getResources().getIntArray(R.array.auto_text_sizes);
textView.setAutoSizeTextTypeUniformWithPresetSizes(autoTextSize, TypedValue.COMPLEX_UNIT_SP);
}
2.2、xml实现
<!--Android8 方式实现,需要在Android8以上机器才生效 -->
<TextView
android:id="@+id/tv_auto_size"
android:layout_width="200dp"
android:layout_height="100dp"
android:background="#888888"
android:maxLines="3"
android:text="啦啦啦啦啦啦啦啦"
android:layout_marginTop="20dp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="16sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="8sp"
android:autoSizePresetSizes="@array/preset_sizes"
/>
基本的使用就是这样。。。