final View decorView = window.getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

其中延伸显示区域到刘海的代码,也可以通过修改Activity或应用的style实现,例如:

<?xml version="1.0" encoding="utf-8"?>

Android O 适配

因Google官方的适配方案到Android P才推出,因此在Android O(8.0版本)设备上,各家厂商有自己的实现方案。

华为Android O适配

方案一:

  1. 具体方式如下所示:
  1. 对Application生效,意味着该应用的所有页面,系统都不会做竖屏场景的特殊下移或者是横屏场景的右移特殊处理。例如:
  1. 对Activity生效,意味着可以针对单个页面进行刘海屏适配,设置了该属性的Activity系统将不会做特殊处理。例如:

方案二:
对Application生效,意味着该应用的所有页面,系统都不会做竖屏场景的特殊下移或者是横屏场景的右移特殊处理。

1,设置应用窗口在华为刘海屏手机使用刘海区。

/刘海屏全屏显示FLAG/
public static final int FLAG_NOTCH_SUPPORT=0x00010000;
/**

  • 设置应用窗口在华为刘海屏手机使用刘海区
  • @param window 应用页面window对象
    */
    public static void setFullScreenWindowLayoutInDisplayCutout(Window window) {
    if (window == null) {
    return;
    }
    WindowManager.LayoutParams layoutParams = window.getAttributes();
    try {
    Class layoutParamsExCls = Class.forName(“com.huawei.android.view.LayoutParamsEx”);
    Constructor con=layoutParamsExCls.getConstructor(LayoutParams.class);
    Object layoutParamsExObj=con.newInstance(layoutParams);
    Method method=layoutParamsExCls.getMethod(“addHwFlags”, int.class);
    method.invoke(layoutParamsExObj, FLAG_NOTCH_SUPPORT);
    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |InstantiationException
    | InvocationTargetException e) {
    Log.e(“test”, “hw add notch screen flag api error”);
    } catch (Exception e) {
    Log.e(“test”, “other Exception”);
    }
    }

2.清除添加的华为刘海屏Flag,恢复应用不使用刘海区显示。

public static void setNotFullScreenWindowLayoutInDisplayCutout (Window window) {
if (window == null) {
return;
}
WindowManager.LayoutParams layoutParams = window.getAttributes();
try {
Class layoutParamsExCls = Class.forName(“com.huawei.android.view.LayoutParamsEx”);
Constructor con=layoutParamsExCls.getConstructor(LayoutParams.class);
Object layoutParamsExObj=con.newInstance(layoutParams);
Method method=layoutParamsExCls.getMethod(“clearHwFlags”, int.class);
method.invoke(layoutParamsExObj, FLAG_NOTCH_SUPPORT);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |InstantiationException
| InvocationTargetException e) {
Log.e(“test”, “hw clear notch screen flag api error”);
} catch (Exception e) {
Log.e(“test”, “other Exception”);
}
}

小米Android O适配

  1. 判断是否是刘海屏。

private static boolean isNotch() {
try {
Method getInt = Class.forName(“android.os.SystemProperties”).getMethod(“getInt”, String.class, int.class);
int notch = (int) getInt.invoke(null, “ro.miui.notch”, 0);
return notch == 1;
} catch (Throwable ignor

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

e) {
}
return false;
}

  1. 设置显示到刘海区域

@Override
public void setDisplayInNotch(Activity activity) {
int flag = 0x00000100 | 0x00000200 | 0x00000400;
try {
Method method = Window.class.getMethod(“addExtraFlags”,
int.class);
method.invoke(activity.getWindow(), flag);
} catch (Exception ignore) {
}
}

  1. 获取刘海宽高

public static int getNotchHeight(Context context) {
int resourceId = context.getResources().getIdentifier(“notch_height”, “dimen”, “android”);
if (resourceId > 0) {
return context.getResources().getDimensionPixelSize(resourceId);
}
return 0;
}

public static int getNotchWidth(Context context) {
int resourceId = context.getResources().getIdentifier(“notch_width”, “dimen”, “android”);
if (resourceId > 0) {
return context.getResources().getDimensionPixelSize(resourceId);
}
return 0;
}

oppo Android O适配

  1. 判断是否是刘海屏

@Override
public boolean hasNotch(Activity activity) {
boolean ret = false;
try {
ret = activity.getPackageManager().hasSystemFeature(“com.oppo.feature.screen.heteromorphism”);
} catch (Throwable ignore) {
}
return ret;
}

  1. 获取刘海的左上角和右下角的坐标

private static String getScreenValue() {
String value = “”;
Class<?> cls;
try {
cls = Class.forName(“android.os.SystemProperties”);
Method get = cls.getMethod(“get”, String.class);
Object object = cls.newInstance();
value = (String) get.invoke(object, “ro.oppo.screen.heteromorphism”);
} catch (Throwable ignore) {
}
return value;
}

好啦,文章到这里就结束啦,如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

catch (Throwable ignore) {
}
return value;
}

好啦,文章到这里就结束啦,如果你觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

[外链图片转存中…(img-UP9OVrO8-1638848540578)]

希望读到这的您能转发分享和关注一下我,以后还会更新技术干货,谢谢您的支持!

转发+点赞+关注,第一时间获取最新知识点

Android刘海屏、水滴屏全面屏适配详解,android开发权威指南相关推荐

  1. Android刘海屏、水滴屏全面屏适配详解

    现在,市面上的屏幕尺寸和全面屏方案五花八门.这里我使用了小米的图来说明: 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖.为便于说明,后文提到的「刘海屏」「刘海区」 ...

  2. Android刘海屏、水滴屏全面屏适配详解,androidui基础教程

    适配方式 适配方式有两种: 将targetSdkVersion版本设置到API 24及以上: 这个操作将会为<application> 标签隐式添加一个属性,android:resizea ...

  3. Android刘海屏、水滴屏全面屏适配详解,997页字节跳动Android面试真题解析火爆全网

    适配方式 适配方式有两种: 将targetSdkVersion版本设置到API 24及以上: 这个操作将会为<application> 标签隐式添加一个属性,android:resizea ...

  4. Android刘海屏、水滴屏全面屏适配详解,android开发实战湖南师范大学出版社

    android:resizeableActivity=["true" | "false"] 如果该属性设置为 true,Activity 将能以分屏和自由形状模 ...

  5. Android刘海屏、水滴屏全面屏适配详解,android开发应用实战详解

    适配方式 适配方式有两种: 将targetSdkVersion版本设置到API 24及以上: 这个操作将会为<application> 标签隐式添加一个属性,android:resizea ...

  6. Android刘海屏、水滴屏全面屏适配详解大厂直通车!

    为什么想跳槽? 简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有 ...

  7. 【Android】【手机适配】Android自定义导航栏和全面屏适配方案

    名词说明 状态栏:StatusBar,手机上方显示电量.时间的横条 导航栏:NavigationBar,手机下方显示虚拟按键的横条 标题栏:ActionBar,应用顶部显示标题的横条 全面屏:界面内容 ...

  8. Android 闪屏启动页全面屏适配

    随着全面屏手机普及,目前市面上的手机屏幕尺寸大致分为三种: 非全面屏(16:9),全面屏(18:9),全面屏(>18:9) App启动初始化程序会出现短暂的白屏问题,为解决白屏可设置启动页面样式 ...

  9. android车载支持格式,安卓全面屏适配攻略(适配超长车载主机)

    前言 2017年9月,拜腾的横空出世,打破了车载主机界一直以来的沉寂,各大媒体也是不吝词藻的对它的超长中控屏进行了大肆的报道.这个时候作为同为车机供应者的诸位友商心里却不那么的平静,恨不得在发布会现场 ...

最新文章

  1. 如何替换所有出现的字符串?
  2. python数据分析numpy_利用python进行数据分析-NumPy高级应用
  3. FPGA设计的基础流程
  4. SOCK_STREAM和SOCK_DGRAM两种类型的区别
  5. 如何不使用让menu控件不回发(postback)
  6. 深度优先搜索——全排列(洛谷 P1706)
  7. CentOS环境Tomcat配置JDK的另一种方式
  8. ubuntu 14.04/14.10 iptables 防火墙设置
  9. MATLAB高斯平顶化,一种高斯光束变换为平顶光束整形透镜的粒子群设计方法与流程...
  10. 什么叫操作系统啊 | 战术后仰
  11. ArcGIS 矢量编辑札记(一):Field Calculator 篇
  12. Fluent瞬态结果导出为Ensight格式
  13. 个人书籍收藏及问题研究(!!! , 读书计划)
  14. sublime text 3143 授权码
  15. Socket中文乱码
  16. 产品使用说明书小程序开发制作说明
  17. 计算机光驱硬盘分区,深入隐藏光驱(磁盘分区)
  18. 【JAVA】8.5.1内部购物券
  19. 关于植物大战僵尸| Plants VS Zombies 运行时 Fatal Error
  20. 京东测试之道,这些你早该知道!

热门文章

  1. TikTok与抖音有什么不同?为什么TikTok被称为“海外版抖音”?
  2. 《Design of Computer Programs》学习笔记(2 - 1)Back of the Envelope - Lesson 2
  3. [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!!
  4. 计算机公式SUBSTITUTE,全了,SUBSTITUTE函数常用套路集合!
  5. 用树莓派都可以DIY“波士顿机器狗”!
  6. cad注释比例和打印比例不一样_CAD注释性比例该如何设置?看完你就懂了
  7. Android面试资料整理
  8. usaco-5.1-fc-passed
  9. mysql容器保存为镜像实战操作(拷贝方法)
  10. 卖二手车及过户的小经验