自動調整TextView的大小的使用autoSizing
Android 8.0允許根據TextView的大小自動設置文本展開或收縮的大小,這意味著,在不同屏幕上優化文本大小或者優化包含動態內容的文本大小比以往簡單多了。
在之前看 文字太多?控件太小?試試 TextView 的新特性 Autosizing 吧! 作者寫到關于這個屬性的所有用法,在這里我就不多說什么了,用法其實挺簡單,關鍵是我在用的時候遇到了一些小問題,導致一直出不來。
官方文檔 點擊即可查看,可以看別人講解的同時也可自行查閱文檔,雙方對比著看,感覺會好一點。
如下圖可以簡單明了的說明該特性:
https://user-gold-cdn.xitu.io/2018/1/16/160fe2fd1fa4e936?w=469&h=713&f=gif&s=764107
具體最簡單的使用有兩種:
1.一種就是api >= api 26的可以直接在xml里面該屬性:
<?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以上,寫法有些不同,如下:
<?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"
當然以上寫法都支持動態編碼,具體可查閱文檔
敲黑板重點
你會發現你寫完之后編譯是報錯的,錯誤類似是這樣的:
找不到!!!
在寫那篇文章作者的幫助下,發現首先要兼容低版本,module
的 build.gradle
文件添加依賴時候 就是這個com.android.support:appcompat-v7:xx
后面的版本號要26以上,你看看你自己項目里有哪個版本你就寫上哪個,還要在project
的 build.gradle
文件里添加:
maven{ url 'https://maven.google.com' }
添加到對應的位置
allprojects {
repositories {
jcenter()
//添加如下內容
maven{
url 'https://maven.google.com'
}
}
}
至此我發現我的項目終于不報錯了,可以運行起來并進行下一步的實踐操作了,大家如果在項目中也遇到這樣的問題,按我那樣改應該沒啥問題了,順便把我寫的代碼上傳到github
上了,又需要的可以下載看看:
demo
另外在查看 Android O
新特性中發現一個比較好玩的東西:現在,findViewById()
函數的全部實例均返回 <T extends View> T,而不是 View。以后就可以這么寫啦:
EditText et = findViewById(R.id.et);
就是那樣,無需強轉了,當然了使用了Kotlin
的話就忽略吧,因為Kotlin
連findViewById
也不用寫,哈哈。更多好玩特性可查看 文檔。