Android8.0 新SupportLibrary26、27功能及变化介绍

新的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)请求对应字体资源,如图

Emoji表情符号兼容库

原理:使用表情符号兼容库,当最新的表情符号在当前系统不支持时,通过兼容库去加载新的表情符号,如图

使用:

  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();
}

#

附Oreo及Android Studio部分功能讲解视频

相关推荐