美文网首页
Android折叠屏适配

Android折叠屏适配

作者: 馒头炖土豆 | 来源:发表于2022-09-28 12:01 被阅读0次

    手机信息

    品牌:OPPO
    型号:PEUM00
    Android版本:11
    ColorOS版本:V12

    屏幕信息

    完全展开时:
    宽:1920
    高:1572
    像素比例:2.75
    每寸像素:440

    完全折叠时:
    宽:988
    高:1762
    像素比例:2.75
    每寸像素:440

    目的一:实时掌握屏幕的折叠情况,最起码能拿到是叠起还是展开

    参考文章1:https://zhuanlan.zhihu.com/p/455215266
    参考文章2:https://blog.csdn.net/Vaccae/article/details/125383573

    探索过程:
    参考文章1使用的库:api "androidx.window:window:1.0.0-alpha09"
    参考文章2使用的库:api "androidx.window:window:1.0.0"

    按照文章的思路,两种方法最终都会获取如下对象:

    val foldingFeature = layoutInfo.displayFeatures.filterIsInstance<FoldingFeature>().firstOrNull()
    

    但是foldingFeature始终为空,通过打印layoutInfo.displayFeatures的结果看,
    layoutInfo.displayFeatures里面的集合是空,因此想通过FoldingFeature来拿到屏幕状态就不能实现

    但是,通过以下代码却可以在屏幕展开或者叠起后,实时拿到屏幕的宽高信息,注意:这个方法只在屏幕宽高变化后才会调用:

    override fun onConfigurationChanged(newConfig: Configuration) {
        super.onConfigurationChanged(newConfig)
        Log.i("test111", "screenHeightDp:" + newConfig.screenHeightDp + ", screenWidthDp:" + newConfig.screenWidthDp);
    }
    

    因此我决定在这个方法中对页面中的某些控件进行操作,比如弹出的DrawerLayout、Dialog等,以DrawerLayout举例说明:
    DrawerLayout在弹出状态下,对屏幕进行折叠和展开操作,DrawerLayout的宽度不会随之变化,因此可以在这个监听中根据屏幕宽度对DrawerLayout的宽度进行实时修改。

    目的二:页面适配

    1:我们APP中的页面使用的是dimen这种以360DP的屏幕宽度为基础等比放大的方法,当屏幕折叠起来的时候,使用dimen显示是正常的,但是当屏幕展开后,由于屏幕的宽度变大了,因此页面里面的布局也随之等比放大了,为此我们进行了讨论,最终决定将屏幕宽度的上限定为600DP,小于600DP还是按照dimen的方法进行等比放大,大于等于600DP的则使用正常的DP,而不再使用dimen


    image.png image.png

    2:app中尺寸使用标准

    xml中,还是要使用dimen,而不是直接使用DP:

    正确:
    android:paddingHorizontal="@dimen/dp_12"
    android:paddingVertical="@dimen/dp_5"

    错误:
    android:layout_height="30dp"
    android:textSize="16sp"

    代码中同XML:

    正确:
    SizeUtils.getDimenFloat(R.dimen.dp_12)
    SizeUtils.getDimen(R.dimen.dp_12)

    错误:
    DisplayUtils.dp2px(context, 12)等

    3:控件适配:比如drawlayout,当抽屉在打开的状态下,进行屏幕折叠,这时候会发现抽屉的宽高没变化(这里有个前提是:Activity没有重新走生命周期),因此这种情况下也需要适配

    目的三:折叠和展开时页面不重新启动

    在清单文件Activity的声明中加入以下配置:

    android:configChanges="screenSize|orientation|smallestScreenSize|screenLayout"
    

    相关文章

      网友评论

          本文标题:Android折叠屏适配

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