Android8.0 新SupportLibrary26、27功能及變化介紹

一隻有交流障礙的醜程式猿發表於2018-01-04

新的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,而是通過下載獲得,這樣做的好處有:

  1. 減小apk體積
  2. 提高應用安裝成功率
  3. 多個app可以共享一份相同的字型資源

原理:App通過fontContract向對應的FontProvider(如 google play)請求對應字型資源,如圖

圖1

Emoji表情符號相容庫

原理:使用表情符號相容庫,當最新的表情符號在當前系統不支援時,通過相容庫去載入新的表情符號,如圖

圖2

使用:

  1. 配置: 下載配置(類似於字型)或者捆綁配置(會增加 apk 7MB)
  2. 在onCreate 中初始化
  3. 用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();
}
複製程式碼

圖3

#

附Oreo及Android Studio部分功能講解視訊

相關文章