Android O 新特性 AutoSizing

自动调整TextView的大小的使用autoSizing

Android 8.0允许根据TextView的大小自动设置文本展开或收缩的大小,这意味着,在不同屏幕上优化文本大小或者优化包含动态内容的文本大小比以往简单多了。

在之前看 文字太多?控件太小?试试 TextView 的新特性 Autosizing 吧! 作者写到关于这个属性的所有用法,在这里我就不多说什么了,用法其实挺简单,关键是我在用的时候遇到了一些小问题,导致一直出不来。

官方文档 点击即可查看,可以看别人讲解的同时也可自行查阅文档,双方对比着看,感觉会好一点。

如下图可以简单明了的说明该特性:

具体最简单的使用有两种:

1.一种就是api >= api 26的可以直接在xml里面该属性:

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform" />

在此需要注意的是:使用这个autoSizeTextType的时候,控件的layout_width layout_height 不能使用这个wrap_content否则看不出什么效果,要使用具体可衡量的。这个也不难理解,因为它要计算,你设置一个模糊的宽和高,就算不出来了。

2. api<26 的低设备 的兼容写法

官方文档里也明确说明了兼容低版本The library provides support to Android 4.0 (API level 14) and higher. 也就是兼容到4.0以上,写法有些不同,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
tools:ignore="MissingPrefix"
app:autoSizeTextType="uniform" />

</LinearLayout>

这个app是这个xmlns:app="http://schemas.android.com/apk/res-auto" 我们在自定义控件的时候经常遇到它,tools是这个xmlns:tools="http://schemas.android.com/tools" 当然以上写法都支持动态编码,具体可查阅文档

敲黑板重点

你会发现你写完之后编译是报错的,错误类似是这样的:

找不到!!!

在写那篇文章作者的帮助下,发现首先要兼容低版本,modulebuild.gradle 文件添加依赖时候 就是这个com.android.support:appcompat-v7:xx 后面的版本号要26以上,你看看你自己项目里有哪个版本你就写上哪个,还要在projectbuild.gradle 文件里添加:
maven{ url 'https://maven.google.com' }添加到对应的位置

1
2
3
4
5
6
7
8
9
allprojects {
repositories {
jcenter()
//添加如下内容
maven{
url 'https://maven.google.com'
}
}
}

至此我发现我的项目终于不报错了,可以运行起来并进行下一步的实践操作了,大家如果在项目中也遇到这样的问题,按我那样改应该没啥问题了,顺便把我写的代码上传到github 上了,又需要的可以下载看看:
demo

另外在查看 Android O新特性中发现一个比较好玩的东西:现在,findViewById() 函数的全部实例均返回 T,而不是 View。以后就可以这么写啦:

1
EditText et =  findViewById(R.id.et);

就是那样,无需强转了,当然了使用了Kotlin的话就忽略吧,因为KotlinfindViewById也不用写,哈哈。更多好玩特性可查看 文档

-------------本文结束感谢您的阅读-------------