Android 异形屏设备设置沉浸式界面
创始人
2025-05-31 10:38:54
问题

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

解决方案

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

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT仅当刘海屏完全包含在系统栏中时,才允许窗口扩展到刘海区域。 否则,窗口的布局使其不与刘海区域重叠。
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES :允许 Window 延伸到短的一侧边缘的刘海区域。
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER :Window 不允许延伸到刘海屏区域。
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS :允许 Window 延伸到所有的屏幕边缘刘海区域。

项目中选用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);}
}

Activity onCreate() 方法中增加方法

ImmersiveUtils.setImmersiveMode(this);

补充

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

    

相关内容

热门资讯

“75亿元投资理财”,摩尔线程... 澎湃新闻记者 周玲 日前,摩尔线程拟将IPO募集的资金不超过75亿元用于投资理财引发了广泛的关注。有...
2025年丰收背后的艰辛历程 2025年的丰收并非一帆风顺,农民们经历了极大的挑战和困难。受气候变化、自然灾害及市场波动等多重因素...
原创 印... 各位朋友大家好,欢迎来到今天的深度国际观察。最近大家都在盯着美联储,觉得只要美国那边一降息,黄金就得...
新修订《证券法》出台,会有更多... 证券法出台,企业上市注册制,对散户来说虽然二级市场会越来越好,风险会越来越大,今天聊聊退市问题,你就...
光大理财副总经理李永锋:以多资... 12月12日,光大理财副总经理李永锋在“时代新叙事 财富新未来”2025上证·大虹桥金融高质量发展大...