新的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();
}
#完