美文网首页适配
新版本特性——二、Android 7.0、8.0、9.0学习整理

新版本特性——二、Android 7.0、8.0、9.0学习整理

作者: Dengszzzzz | 来源:发表于2019-08-20 22:17 被阅读0次

    前言

    基于上篇文章Android 5.0之后的各版本与日常开发相关的内容整理,本篇文章对Android 7.0、8.0、9.0做个简述。
    内容如下:
    Android 7.0(N)
    1.多窗口支持(分屏模式)
    2.桌面长按图标出现快捷方式

    Android 8.0(O)
    1.画中画模式(PIP,其实就像是分屏模式的优化版)
    2.自定义字体,可下载字体(AS 3.x以上可以找到,但没有中文字体可下载)。
    3.自动缩放文本视图(Autosizing TextView)

    Android 9.0(P)
    1.刘海屏适配。
    2.ImageDecoder 和 AnimagedImageDrawable。

    Android 7.0

    1、多窗口支持(分屏模式)

    Android N允许用户一次在屏幕中使用两个App。

    知识点
    1、禁用分屏模式。
    App默认允许分屏模式,如果要禁用分屏模式,可以在AndroidManifest.xml的application节点添加属性android:resizeableActivity="false",表示应用页面不接受分屏,这样有的手机就没有显示分屏按钮了,或者即使用户开启了分屏模式,切换到该应用时仍会强制回到全屏模式。

    2、全屏->分屏->全屏的生命周期如何变化?
    App页面从全屏模式切换到分屏模式,它的Activity生命周期会经历销毁后重建的过程,如果不希望重建,可以在该页面设置android:configChanges="orientation|screenLayout|screenSize"。(不设置screenSize也可能会成功)
    举例A、B两个app。
    1)appA,全屏->分屏:
    onPause() -> onStop() -> onMultiWindowModeChanged() ->onStart() ->onResume() ->onPause()。
    2)此时要选择appB分屏,当点击appA时,appA才会调用onResume。
    3)appA,分屏->全屏,此时只会回调 onMultiWindowModeChanged()。

    3、isInMultiWindowMode()可得知当前是否处于分屏模式;onMultiWindowModeChanged方法是每次切换进出分屏模式都会回调的。

    4、视频播放页面,建议不在onPause方法中暂停播放视频,而应当在onStop方法中暂停播放,并在onStart方法中恢复播放视频。

    总结
    分屏主要影响的是视频播放页面,需要在视频播放页设置分配不重建,且把视频播放暂停逻辑移到onStop()和onStart()中。实际上分屏使用情况率不太多,也可以禁止它分屏。

    参考
    Android编程开发技巧之Android7.0的分屏模式

    2、桌面长按图标出现快捷方式

    桌面长按图标出现快捷方式条目,可以拖动到桌面,放置成一个单独固定的桌面快捷方式,具体效果可以看支付宝和微博。它分为静态配置和动态配置

    静态配置
    1)在res文件夹下创建xml目录,并在xml目录下创建配置文件 shortcuts.xml。
    2.)在Manifest中添加meta-data配置。只在app启动的第一个页面添加配置才有效。

    //关键代码
    //1.shortcuts.xml
    //shortcutLongLabel 就是长按显示的条目
    //shortcutShortLabel 就是拖动到桌面显示的文字
    
    <shortcuts  xmlns:android="http://schemas.android.com/apk/res/android">    
    <shortcut
            android:shortcutId="v5_6_function"
            android:enabled="true"
            android:icon="@mipmap/ic_launcher"
            android:shortcutShortLabel="@string/short_label_5"
            android:shortcutLongLabel="@string/long_label_5"
            android:shortcutDisabledMessage="@string/disable_msg_5">
    
            <intent
                android:action="android.intent.action.VIEW"
                android:targetPackage="com.sz.dzh.dviewsummary"
                android:targetClass="com.sz.dzh.dviewsummary.module.v5_6_function.V5FunctionListActivity" />
    
        </shortcut>
     </shortcuts>
    
    
    //2.在AndroidManifest.xml 中 app启动的第一个Activity里添加配置
     <meta-data
                    android:name="android.app.shortcuts"
                    android:resource="@xml/shortcuts" />
    

    动态配置
    由ShortcutManager发布, 可以根据用户的行为或者偏好添加, 动态更新。

    参考
    Android 7.0新特性——桌面长按图标出现快捷方式

    Android 8.0

    1、画中画(PIP模式)

    Android 7.0推出了分屏模式,8.0推出了新的多窗口模式——“Picture in Picture”(简称PIP,“画中画”)和分屏模式一样,适合用于视频播放,用户体验上更佳。

    知识点
    1、开启PIP模式
    和分屏模式不一样,Activity默认不支持PIP模式,如果要开启,需要在Activity设置
    android:supportsPictureInPicture="true"。
    2、和分屏模式一样,Activity不重建,可以设置android:configChanges="orientation|screenLayout|screenSize"。此时点击进入PIP模式,会调用onPause()和onPictureInPictureModeChanged()。
    3、isInPictureInPictureMode()可得知当前是否处于PIP模式;onPictureInPictureModeChanged方法是每次切换进出PIP模式都会回调的。
    4、PIP模式进入需在代码里设置,enterPictureInPictureMode()方法。

    总结
    PIP模式主要影响的是视频播放页面,需要在视频播放页设置分配不重建,且把视频播放暂停逻辑移到onStop()和onStart()中,它的用户体验比分屏模式好很多。

    参考
    Android 8.0 新特性及开发指南

    2、自定义字体及可下载字体

    在Android 8.0之前,要在视图上使用自定义字体必须进行以下操作。
    1)将字体文件放到 assets 文件夹。
    2)从 asset 文件将字体加载为 Typeface 对象
    3)用 TextView.setTypeface() 设置视图的 Typeface。

    Typeface tf =Typeface.createFromAsset(getAssets(), "fonts/sxslst.ttf");
    tvOld.setTypeface(tf);
    

    Android 8 推出了字体资源的新特性,提供了可下载字体,不直接与APK一同打包,而是在第一次使用的时候才去请求,下载和使用方式如下:
    1)在Layout Editor中,选择一个TextView,然后在Attributes窗口中, 选择fontFamily > More Fonts,出现了字体Resources窗口。
    2)选择要下载的字体,然后会在res\fonts 文件夹下创建这个字体的xml,在TextView中添加android:fontFamily="@font/akronim"即可使用了。
    3)LayoutInflater和资源搜索是同步任务。默认情况下,首次尝试检索字体会触发对提供字体的应用程序的请求,从而增加了第一个布局绘制时间,为了避免延迟,可以在Manifest中预先声明需要检索的字体。如果要替换全局字体,可以在theme下设置 fontFamily。

    AS的字体选择页面


    image.png

    总结
    Google提供的可下载字体都是对中文不生效的,这功能对国内开发者来说没啥用处,要改变字体还是得用回以前的方式。

    参考
    Android 8.0 新特性(一) - 可下载字体
    Android 自定义和可下载字体

    3、Autosizing TextView

    自动调整文本大小的TextView,当TextView的布局边界尺寸发生变化时,文本大小可以跟着自动缩放调整。文本的自动缩放支持两种模式,粒度型和预置大小型。
    粒度型:没有设置autoSizePresetSizes,那么会按缩放步长进行每一次得缩放。
    预置大小型:文字的大小按预置变大,比如可以12sp直接到50sp。

    属性 作用
    autoSizeTextType none(默认,表示不自动缩放)、uniform(横、纵缩放)
    autoSizeMinTextSize 最小尺寸
    autoSizeMaxTextSize 最大尺寸
    autoSizeStepGranularity 变化粒度的步长,粒度型
    autoSizePresetSizes 指定预置大小序列,为array数组,预置大小型

    参考
    Android O —— Autosizing TextViews 自动调整文本大小的TextView

    Android 9.0

    1、刘海屏适配

    Google将刘海屏命名为屏幕缺口,Android P 支持最新的全面屏以及为摄像头和扬声器预留空间的凹口屏幕,它提供的适配方案如下:
    1)对于有状态栏的页面,不会受到刘海屏特性的影响,因为刘海屏包含在状态栏中了。
    2)全屏显示的页面,系统刘海屏方案会对应用界面做下移处理,避开刘海区显示,这时会看到刘海区域变成一条黑边;
    3)已经适配Android P应用的全屏页面可以通过谷歌提供的适配方案使用刘海区,真正做到全屏显示。
    可见,其实如果能接受刘海那一块有黑边,不作操作也行,如果一些页面图片要置顶到状态栏,这时候就要做全屏适配了。

    针对页面是全屏显示的情况

    1、不适配的话将会留出一条黑色边。
    2、要做到真正全屏的话,那么就先要获取到刘海的区域(危险区域),内容部分(操作按钮等)应当避开危险区域,保证在安全区域中展示。横屏的话两边都需要注意避开刘海(危险区域)。

    各厂商刘海屏适配
    上述的适配是Android 9.0才有的解决方案,在这之前,要用各个厂商的自己的刘海屏适配。

    参考
    Android 刘海屏适配全攻略

    2、ImageDecoder 和 AnimagedImageDrawable

    ImageDecoder,该类除了支持对各种图片格式的解码、缩放、裁剪之外,其强大之处在于支持对解码后的图像做后期处理(post-process),使用该功能可以添加复杂的自定义特效,比如圆角,或是将图片放在圆形像框中。编写后期处理回调函数,你可以添加任何绘图指令实现需要的效果。

    AnimagedImageDrawable,支持GIF和WebP格式的动图,并被新增的解码器类ImageDecoder直接支持,用法跟矢量动画类AnimatedVectorDrawable类似,实现方式也类似,通过新增渲染线程和工作线程,不需要在UI线程处理动图更新。

    参考
    Android P图像媒体后期处理
    android P ImageDecoder 使用

    Github地址:DViewSummary

    相关文章

      网友评论

        本文标题:新版本特性——二、Android 7.0、8.0、9.0学习整理

        本文链接:https://www.haomeiwen.com/subject/oqomsctx.html