Android 异形屏设备设置沉浸式界面

2023-03-19  本文已影响0人  果汁味Studio
问题

由于业务需要,应用需要配置沉浸式界面,但设置全屏时,会遇到异形屏采用传统的全屏设置模式无效问题。

解决方案

Android P版本提供参数layoutInDisplayCutoutMode供实现沉浸式设置。layoutInDisplayCutoutMode几种属性设置:

项目中选用shortEdges模式,直接上代码

public final class ImmersiveUtils {

    private ImmersiveUtils() {
    }


    /**
     * 设置沉浸式模式
     */
    public static void setImmersiveMode(Activity activity) {
        Window window = activity.getWindow();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
            WindowManager.LayoutParams lp = window.getAttributes();
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
            window.setAttributes(lp);
        } else {
            window.requestFeature(Window.FEATURE_NO_TITLE);
            window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        final View decorView = window.getDecorView();
        decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
        window.setStatusBarColor(Color.TRANSPARENT);
    }
}

ActivityonCreate()方法中增加方法

ImmersiveUtils.setImmersiveMode(this);
补充

实际测试中,发现部分高版本异形屏机型的启动页通过上述方式设置,仍显示黑色的状态栏(神奇!!!)。
解决方案:
方法设置同时,在对应主题进行配置,问题解决了,具体如下

    <style name="AppTheme" parent="@style/Theme.AppCompat.DayNight.NoActionBar">
        <item name="android:windowFullscreen">true</item>

        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
上一篇下一篇

猜你喜欢

热点阅读