
2.1.2 Android刘海屏适配
发布日期:2021-05-10 09:34:12
浏览次数:21
分类:精选文章
本文共 2289 字,大约阅读时间需要 7 分钟。
屏幕适配-Android9.0官方刘海屏适配策略
- 如果非全屏模式(有状态栏),则app不受刘海屏的影响,刘海屏的高就是状态栏的高
- 如果全屏模式,app位适配刘海屏,系统会对界面做特殊处理,竖屏向下移动,横屏向右移动
Google在Android9.0推出了刘海屏适配的方案,Android9.0以后,采用此方案即可。
全屏模式下,如何让界面延伸进刘海
判断手机是否是刘海屏
private boolean hasDisplayCutout(Window window) { DisplayCutout displayCutout; View rootView = window.getDecorView(); WindowInsets insets = rootView.getRootWindowInsets(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && insets != null){ displayCutout = insets.getDisplayCutout(); if (displayCutout != null){ if (displayCutout.getBoundingRects() != null && displayCutout.getBoundingRects().size() > 0 && displayCutout.getSafeInsetTop() > 0){ return true; } } } return false; //模拟器,这里设置成true }
让内容区域延伸进刘海
WindowManager.LayoutParams params = window.getAttributes();/** * * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 全屏模式,内容下移,非全屏不受影响 * * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 允许内容去延伸进刘海区 * * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 不允许内容延伸进刘海区 */params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;window.setAttributes(params);
设置成沉浸式
int flags = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;int visibility = window.getDecorView().getSystemUiVisibility();visibility |= flags; //追加沉浸式设置window.getDecorView().setSystemUiVisibility(visibility);
设置控件是否避开刘海区域,避免Button等控件被刘海屏遮盖

//通常情况下,刘海的高就是状态栏的高public int heightForDisplayCutout(){ int resID = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resID > 0){ return getResources().getDimensionPixelSize(resID); } return 96;}
可以设置Button等空间的Margin
Button button = findViewById(R.id.button);RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) button.getLayoutParams();layoutParams.topMargin = heightForDisplayCutout();button.setLayoutParams(layoutParams);
也可以设置界面的Padding
RelativeLayout layout = findViewById(R.id.container); layout.setPadding(layout.getPaddingLeft(), heightForDisplayCutout(), layout.getPaddingRight(), layout.getPaddingBottom());
屏幕适配 - 刘海屏适配 - 其他手机厂商(华为,小米,oppo,vivo)适配
对于Android9.0之前,国内厂商有各色各样的适配方案,详见各厂商官方文档。
华为: 小米: Oppo: Vivo:GitHub上已封装好的刘海屏适配方案
发表评论
最新留言
很好
[***.229.124.182]2025年04月04日 17时28分27秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
排序算法之总结
2021-05-09
微软云Linux服务器 Mysql、tomcat远程连接错误解决办法
2021-05-09
Java基础知识回顾之六 ----- IO流
2021-05-09
Python数据分析(二): Numpy技巧 (2/4)
2021-05-09
09 . Python3之常用模块
2021-05-09
Python学习笔记-StatsModels 统计回归(3)模型数据的准备
2021-05-09
Velocity.js初步
2021-05-09
Ubuntu16.04中php如何切换版本
2021-05-09
nginx上配置phpmyadmin
2021-05-09
HustOJ二次开发之修改数据库连接池
2021-05-09
SpringBoot之整合Dubbo
2021-05-09
Drools之关键字及错误信息
2021-05-09
嘿!为你的应用创建滚动日志吧?
2021-05-09
一个JAVA应用启动缓慢问题排查 --来自jdk securerandom 的问候
2021-05-09
报警系统:php输出头信息以方便脚本抓取信息[排查篇]
2021-05-09
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2021-05-09
httprunner学习23-加解密
2021-05-09
jenkins学习6-进docker容器修改jenkins时间
2021-05-09