新的SupportLibrary
隨著Android Oreo 釋出了新的Support庫
特性
- 8.0 對應 SupportLibrary26
- 8.1 對應 SupportLibrary27
- 它們最低支援的API為14(即支援4.0及以後的裝置)
- 刪除了1400個方法
- 將30個類,400個方法標為棄用
使用方式
repositories{
google()
}
dependencies{
compile com.android.support:aappcompat.v7:26.0.1
}
複製程式碼
新功能
以下內容為 Oreo 提供的新功能,在低版本Android 裝置上可以通過新的Support庫來使用
XML中的字型
字型可以作為一種新的資源型別
使用方式
1. 在res資料夾下建立font資料夾
2. 將font型別檔案(如dacing.ttf)拷貝到此目錄下
3. 或者將多個font檔案建立成一個font族(font family)
4. TextView 通過設定屬性使用:android:fontFamily=“@font/lalala”
Style 通過設定屬性使用:<item name="android:fontFamily">@font/lobster</item>
如果使用Support 庫,需要使用對應的namespace
在程式碼中獲取字型資源:Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
複製程式碼
font family 舉例
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
複製程式碼
字型可下載
我們可以選擇不將字型資源打包入apk,而是通過下載獲得,這樣做的好處有:
- 減小apk體積
- 提高應用安裝成功率
- 多個app可以共享一份相同的字型資源
原理:App通過fontContract向對應的FontProvider(如 google play)請求對應字型資源,如圖
Emoji表情符號相容庫
原理:使用表情符號相容庫,當最新的表情符號在當前系統不支援時,通過相容庫去載入新的表情符號,如圖
使用:
- 配置: 下載配置(類似於字型)或者捆綁配置(會增加 apk 7MB)
- 在onCreate 中初始化
- 用EmojiTextView代替TextView,用EmojiButton代替Button等
TextView自動調整文字大小
Support26庫中提供了自動調整文字大小的TextView,android.support.v4.widget 包中的 TextViewCompat功能與此類似,如果需要支援4.0以下裝置,可以考慮使用v4包
注意:如果使用自動調整文字大小,不建議寬或者高設定為wrap_content,這會導致意想不到的錯誤
使用方式有三個方面(如果是support,注意使用namespace):
- TextView預設是開啟自動調整文字大小的
我們可以在程式碼中通過setAutoSizeTextTypeWithDefaults(AUTO_SIZE_TEXT_TYPE_NONE)來關閉,這個屬性也可以在xml檔案中設定
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform" />
複製程式碼
- 通過最大最小值、粒度來控制自動調整大小的行為細節
在程式碼中動態設定 setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
xml檔案中設定
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="12sp"
android:autoSizeMaxTextSize="100sp"
android:autoSizeStepGranularity="2sp" />
複製程式碼
- 我們也可以指定調整大小的具體值
在程式碼中動態設定 setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
xml檔案中設定,首先在res/values/arrays.xmlres/values/arrays.xml中建立陣列
<resources>
<array name="autosize_text_sizes">
<item>10sp</item>
<item>12sp</item>
<item>20sp</item>
<item>40sp</item>
<item>100sp</item>
</array>
</resources>
引用此陣列
<TextView
android:layout_width="match_parent"
android:layout_height="200dp"
android:autoSizeTextType="uniform"
android:autoSizePresetSizes="@array/autosize_text_sizes" />
複製程式碼
VectorDrawableCompat
增加了android:filltype屬性,以增加對svg中fill—rule的支援
AnimatedVectorDrawableCompat
增加了基於xml的路徑變形及插值
基於物理的動畫(DynamicAnimation
和MaterialDesigh思想類似,模擬真實世界中的動畫效果,目前有兩種基於物理的動畫
- FlingAnimation(模擬摩擦,有一個初始速度,逐漸減慢至0)
FlingAnimation(view,DynamicAnimation.TRANSLATION_Y).apply{
setStartVelocity(5000f); //pixels per second
friction = 1.5f; //摩擦係數
start();
}
複製程式碼
- SpringAnimation(模擬彈簧,可以設定阻尼比,剛度,最後停下的位置等)
SpringAnimation(view,SpringANimation.TRANSLATION.Y,0f).apply{
spring.apply{
dampingRatio = SpringForce.DAMPING>RATIO>LOW>BOUNCY;
stiffness = SpringForce.STIFFNESS_LOW;
finalPosition = 0f;
}
setStartVelocity(20000f);
start();
}
複製程式碼
#完