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

news/2024/12/15 16:23:40/

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

问题

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

解决方案

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);}
}

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>

http://www.ppmy.cn/news/1555339.html

相关文章

c语言数据结构与算法--简单实现线性表(顺序表+链表)的插入与删除

老规矩&#xff0c;点赞评论收藏关注&#xff01;&#xff01;&#xff01; 目录 线性表 其特点是&#xff1a; 算法实现&#xff1a; 运行结果展示 链表 插入元素&#xff1a; 删除元素&#xff1a; 算法实现 运行结果 线性表是由n个数据元素组成的有限序列&#xff0c;每个元…

双重AEB:将基于规则的方法与多模态大型语言模型相结合,以实现有效的紧急制动(202410)

Dual-AEB: Synergizing Rule-Based and Multimodal Large Language Models for Effective Emergency Braking 双重AEB&#xff1a;将基于规则的方法与多模态大型语言模型相结合&#xff0c;以实现有效的紧急制动 Abstract Automatic Emergency Braking (AEB) systems are a c…

PyTorch 梯度计算详解:以 detach 示例为例

PyTorch 梯度计算详解&#xff1a;以 detach 示例为例 在深度学习中&#xff0c;梯度计算是训练模型的核心步骤&#xff0c;而 PyTorch 通过自动微分&#xff08;autograd&#xff09;模块实现了高效的梯度求解。本文将通过一个实际代码示例&#xff0c;详细讲解 PyTorch 的梯…

测试脚本并发多进程:pytest-xdist用法

参考&#xff1a;https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解&#xff1a; https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html

`BertModel` 和 `BertForMaskedLM

是的&#xff0c;BertModel 和 BertForMaskedLM 是两个不同的类&#xff0c;它们的功能和应用场景有所区别。以下是两者的详细对比&#xff1a; 1. BertModel 功能 BertModel 是基础的 BERT 模型&#xff0c;输出的是编码器的隐层表示&#xff08;hidden states&#xff09;&…

MySQL八股文

MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;使用最常用的数据库管理语言–结构化查询语言&#xff08;SQL&…

3D扫描和3D打印的结合应用

3D扫描和3D打印是两种紧密相连的增材制造技术&#xff0c;它们在多个领域中都发挥着重要作用。以下是对3D扫描和3D打印的详细解释&#xff1a; 一、3D扫描 3D扫描是运用软件对物体结构进行多方位扫描&#xff0c;从而建立物体的三维数字模型的技术。积木易搭在三维扫描设备&a…

Apache APISIX快速入门

本文将介绍Apache APISIX&#xff0c;这是一个开源API网关&#xff0c;可以处理速率限制选项&#xff0c;并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…