android之刘海屏适配
1 适配Android刘海屏小结
一、沉浸式与非沉浸式来回切换页面适配
二、沉浸式页面适配
(非沉浸式页面,系统自动适配)
不进行任何适配的情况下,带有刘海屏的手机都会有一套基本一致的处理逻辑。
![](http://upload-images.jianshu.io/upload_images/7396903-b83605e7f1380e8d.png?imageMogr2/auto-orient/strip|imageView2/2/w/382/format/webp)
一、沉浸式与非沉浸式来回切换页面适配
阅读正文界面
![](http://upload-images.jianshu.io/upload_images/7396903-6210fb6aab89db79.png?imageMogr2/auto-orient/strip|imageView2/2/w/316/format/webp)
1、 存在问题: 正文页面在阅读的时候是沉浸式的(无菜单,状态栏), 由于沉浸式的时候, 系统的策略是刘海旁边为黑色(屏幕高度此时不算刘海旁边区域高度), 点击正文空白区域, 显示菜单的时候(显示状态栏,这时候为非沉浸式,屏幕高度算刘海旁边区域高度), 导致屏幕高度老是变化, 阅读器sdk会重新对章节,按屏幕高度重新排版。 所以看书界面会经常显示加载中。
2、蜗牛阅读正文适配: 使用假状态栏(一直不显示真状态栏,一直为沉浸式, 高度不会变化)
3、云阅读解决:
使用了文漫工具类, 刘海检测Util (DisplayCutoutUtil . hasDisplayCutout()是否为刘海屏 ,. displayCutoutRect()获取刘海屏的刘海矩形区域)。
4、云阅读书籍正文策略:
先检测是否是刘海屏幕
1、如果不是刘海屏幕——> 不改变
2、如果是刘海屏幕 ——>
方案一: 简单方案( 很简单, 暂时使用这个方式)
![](http://upload-images.jianshu.io/upload_images/7396903-0da56aef4d25726a.png?imageMogr2/auto-orient/strip|imageView2/2/w/627/format/webp)
a、 让状态栏长期显示 (反正不显示也是黑色的), 不设置getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)(全屏模式), 菜单切换也不动FLAG_FULLSCREEN
b、a步骤完成,发现正文顶上去了
![](http://upload-images.jianshu.io/upload_images/7396903-852f531f224b1939.png?imageMogr2/auto-orient/strip|imageView2/2/w/376/format/webp)
调整MainView顶部的paddingtop 为 原来的 paddingtop + 刘海的区域的高度
![](http://upload-images.jianshu.io/upload_images/7396903-ef7c5849155f4a3e.png?imageMogr2/auto-orient/strip|imageView2/2/w/640/format/webp)
方案二: 针对不同的手机,对其进行适配 (比较麻烦,暂时放弃)
![](http://upload-images.jianshu.io/upload_images/7396903-970d27516db86ed3.png?imageMogr2/auto-orient/strip|imageView2/2/w/412/format/webp)
已公布实现方案的厂商(适配方式基本是通过反射调用特有方法/获取系统属性来判断),包括华为、小米、OPPO、VIVO,官方的适配文档地址如下:
未公布刘海屏适配文档的厂商,只能等待这些机型升级到Android P之后通过 Google 官方的方式进行适配
通过EMUI系统内提供的com.huawei.android.util.HwNotchSizeUtil来处理
小米:小米 MIUI Notch 屏 Android O 适配说明
通过MIUI系统属性ro.miui.notch来判断是否为刘海屏
OPPO:OPPO凹形屏适配说明
通过com.oppo.feature.screen.heteromorphism属性来判断是否为刘海屏
VIVO:VIVO全面屏应用适配指南
通过特有类android.util.FtFeature类来判断是否为刘海屏。
另外,也和蜗牛阅读一样,把底部的导航栏隐藏了
二、沉浸式页面适配
1、云阅读有声书播放界面是沉浸式的状态栏,
总体思路:刘海屏状态栏的高度其实和普通的都是一样, 所以只要给全面屏的页面设置一个paddingtop就可以实现,
写一个公共的头部布局在基类里用,给头布局设置一个ayout_marginTop。
![](http://upload-images.jianshu.io/upload_images/7396903-4f51f26c39241afd.png?imageMogr2/auto-orient/strip|imageView2/2/w/376/format/webp)
1、 设置全屏,设置状态栏透明
![](http://upload-images.jianshu.io/upload_images/7396903-d07b677453bc4cb7.png?imageMogr2/auto-orient/strip|imageView2/2/w/633/format/webp)
2、获取到头布局 audio_player_title, 非刘海屏幕的时候离顶部,默认20dp
![](http://upload-images.jianshu.io/upload_images/7396903-a79ceb969ecc54a7.png?imageMogr2/auto-orient/strip|imageView2/2/w/629/format/webp)
3:给头布局设置布局的paddingtop
非刘海屏幕——>不用处理
刘海屏幕——> 设置mtitleView 距离顶部为刘海区域的高度
![](http://upload-images.jianshu.io/upload_images/7396903-c3d162fa4e77b7a2.png?imageMogr2/auto-orient/strip|imageView2/2/w/626/format/webp)
相关文章
- Android telephony_android获取真实时间
- android onresume方法,非静态方法’onResume’Android Studio
- android开机动画多长时间_Android开机动画原理分析
- android 常用加密,分享一下Android各种类型的加密
- Android 屏幕适配
- android sdk manager安装,Android SDK Manager安装过程
- android 定时器重置,Android定时器延迟和重置[通俗易懂]
- Android ListView下拉/上拉刷新:设计原理与实现「建议收藏」
- android触摸屏事件,Android Touch事件分析
- android调用相册并显示图片_Android获取相册列表
- android横竖屏切换问题
- 【Android FFMPEG 开发】FFMPEG AVFrame 图像格式转换 YUV -> RGBA ( 获取 SwsContext | 初始化图像数据存储内存 | 图像格式转换 )
- 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
- 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- 【Android Gradle 插件】主工程与依赖库变体配置 (LibraryExtension#libraryVariants|AppExtension#applicationVariants)
- 【Android 屏幕适配】屏幕适配通用解决方案 ② ( 自定义组件解决方案 | 需要解决的问题 : 设计稿坐标数据转为屏幕真实坐标数据 | 实现步骤 )
- 【Android 屏幕适配】屏幕适配通用解决方案 ④ ( 自定义组件解决方案 | 计算设计稿与实际布局的比例系数 )
- 【Android 屏幕适配】屏幕适配通用解决方案 ⑥ ( 约束布局 ConstraintLayout 百分比布局方案 | 将设计稿尺寸自动转为约束布局百分比标签属性 | 将输出结果设置到组件标签中 )
- 【Android NDK 开发】CMake 中查找链接 Android 自带动态库位置说明 ( ndk-bundleplatformsandroid-29arch-armusrlib )
- 【Android OpenCV】Visual Studio 创建支持 OpenCV 库的 CMake 工程 ③ ( CMake 工程中配置 OpenCV 库文件 | 拷贝 OpenCV 函数库文件 )
- Android控制文字水平间距android:letterSpacing详解手机开发
- 开源正在毁掉 Android 吗?
- Fuchsia 对 Android 意味着什么
- Android中库项目的使用方法图文介绍
- Android工程内嵌资源文件的两种方法
- Android解析服务器端发来的xml数据示例
- Android中检查、监听电量和充电状态的方法