Android刘海屏、水滴屏全面屏适配详解,android开发权威指南
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适配
方案一:
- 具体方式如下所示:
- 对Application生效,意味着该应用的所有页面,系统都不会做竖屏场景的特殊下移或者是横屏场景的右移特殊处理。例如:
- 对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适配
- 判断是否是刘海屏。
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;
}
- 设置显示到刘海区域
@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) {
}
}
- 获取刘海宽高
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适配
- 判断是否是刘海屏
@Override
public boolean hasNotch(Activity activity) {
boolean ret = false;
try {
ret = activity.getPackageManager().hasSystemFeature(“com.oppo.feature.screen.heteromorphism”);
} catch (Throwable ignore) {
}
return ret;
}
- 获取刘海的左上角和右下角的坐标
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开发权威指南相关推荐
- Android刘海屏、水滴屏全面屏适配详解
现在,市面上的屏幕尺寸和全面屏方案五花八门.这里我使用了小米的图来说明: 上述两种屏幕都可以统称为刘海屏,不过对于右侧较小的刘海,业界一般称为水滴屏或美人尖.为便于说明,后文提到的「刘海屏」「刘海区」 ...
- Android刘海屏、水滴屏全面屏适配详解,androidui基础教程
适配方式 适配方式有两种: 将targetSdkVersion版本设置到API 24及以上: 这个操作将会为<application> 标签隐式添加一个属性,android:resizea ...
- Android刘海屏、水滴屏全面屏适配详解,997页字节跳动Android面试真题解析火爆全网
适配方式 适配方式有两种: 将targetSdkVersion版本设置到API 24及以上: 这个操作将会为<application> 标签隐式添加一个属性,android:resizea ...
- Android刘海屏、水滴屏全面屏适配详解,android开发实战湖南师范大学出版社
android:resizeableActivity=["true" | "false"] 如果该属性设置为 true,Activity 将能以分屏和自由形状模 ...
- Android刘海屏、水滴屏全面屏适配详解,android开发应用实战详解
适配方式 适配方式有两种: 将targetSdkVersion版本设置到API 24及以上: 这个操作将会为<application> 标签隐式添加一个属性,android:resizea ...
- Android刘海屏、水滴屏全面屏适配详解大厂直通车!
为什么想跳槽? 简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有 ...
- 【Android】【手机适配】Android自定义导航栏和全面屏适配方案
名词说明 状态栏:StatusBar,手机上方显示电量.时间的横条 导航栏:NavigationBar,手机下方显示虚拟按键的横条 标题栏:ActionBar,应用顶部显示标题的横条 全面屏:界面内容 ...
- Android 闪屏启动页全面屏适配
随着全面屏手机普及,目前市面上的手机屏幕尺寸大致分为三种: 非全面屏(16:9),全面屏(18:9),全面屏(>18:9) App启动初始化程序会出现短暂的白屏问题,为解决白屏可设置启动页面样式 ...
- android车载支持格式,安卓全面屏适配攻略(适配超长车载主机)
前言 2017年9月,拜腾的横空出世,打破了车载主机界一直以来的沉寂,各大媒体也是不吝词藻的对它的超长中控屏进行了大肆的报道.这个时候作为同为车机供应者的诸位友商心里却不那么的平静,恨不得在发布会现场 ...
最新文章
- 在CentOS 6.9 x86_64的nginx 1.12.2上开启标准模块ngx_http_map_module实录
- python爬虫如何配置动态爬虫代理
- Hello CNBLOGS
- 通过virtualbox最小化安装centos 6.3后无法上网解决办法
- codeup 二叉树(dfs超时版)
- iOS开源项目周报0316
- Oracle学习:事务的基本概念
- android 视频监控相关(打包下载)
- Spring MVC中的视图解析ViewResolver
- 计算机网络实验3:网络设备基本配置
- LeetCode(169)——求众数(JavaScript)
- powerpc如何移植Linux系统,PowerPC平台 u-boot 移栽
- Linux重定向和管道的基础学习
- miniUI ExcelExport导出JAVA实现
- 计算机应用基础评价内容,计算机应用基础教学中过程性评价的研究
- 基于React的富文本编辑器——Braft Editor使用
- 轻松搞定分组报表中的各种排序
- 网易嵌入式面试 2015年8月19日晚网易电话面试
- 28.从键盘输入10个正负相间的整数,输出个位数是奇数、十位数是偶数的所有数。
- 线程局部变量 ThreadLocal
热门文章
- spring 容器启动执行重置定时任务
- Ubuntu18如何下载微信和qq
- android user-agent iso-8859-1,微信大众,平台消息接口开辟(31)微信浏览器HTTP_USER_AGENT断定...
- 企业品牌私域化运营,私域流量只是起步
- 全面了解超声波传感器
- 啊哈添柴挑战Java1221. 输出三角形
- psm进销存管理系统、供应商管理、进货管理、销售管理、仓库管理、采购记录、库存盘点、调拨单、出库单、借入单、进货报表、采购记录、销售往来账、采购往来账、图表分析、人事管理、销售报表、财务报表、rp原型
- selenium 接管已经打开的本地浏览器窗口
- 一本通1360:奇怪的电梯(lift)
- 从 Server Timing Header 看服务器是如何处理请求的