公司复工第一周,最近受疫情影响,不能出门,学校规定不得返回学校与工作地,所以暂时在家办公两周。
这一周开始实现项目需求,由荣耀V30挖空屏引出的刘海屏适配问题。
现在项目中的部分页面已经有相关的刘海屏适配界面,所涉及的函数在FullScreenUtil和UIHelper两个类里,目前应用中全屏显示的界面且适配全面屏的界面有RollPaperReadingActivity和VerticalReadingActivity,都继承自BaseReadingActivity,另外ComicFastReadActivity未使用全面屏显示,个人认为应该与漫画阅读页同步,也使用全面屏显示并适配刘海屏。
小说阅读界面因为需要显示章节名和文字,所以不能使用刘海区域,防止刘海遮挡文字。
全面屏适配方案:
1、AndroidO
AndroidO版本,google官方没有提供适配刘海屏的API,所以项目中都是使用厂商自己的API来识别和适配刘海屏,项目中只针对华为、小米、OPPO、VIVO四个厂商进行了优化,这四个厂商的刘海屏API最低适配版本均为AndroidO,从这四个手机厂商官网找到对应的全屏但不占用刘海的方案,目前只有小米、华为提供了具体方法来设置是否占用刘海区域,oppo和vivo只提供了机型是否是刘海屏手机的方法,但未提供适配方案。
相关文档说明:
1、华为:http://mini.eastday.com/bdmip/180411011257629.html#
2、小米:https://dev.mi.com/console/doc/detail?pId=1293
3、oppo:https://open.oppomobile.com/wiki/doc#id=10159
4、vivo:https://dev.vivo.com.cn/documentCenter/doc/103
2、AndroidP
AndroidP版本中,可以通过google官方提供的DisplayCutout类来对刘海屏机型机型适配
相关文档说明:https://source.android.google.cn/devices/tech/display/display-cutouts?hl=zh_cn
特殊情况:
华为和小米的刘海屏机型可以在设置里开启隐藏刘海选项,打开隐藏刘海选项系统会将状态栏设为黑色,如果仍使用全面屏显示,会导致整个顶部状态栏区域被遮挡,所以这种情况建议不使用全面屏和刘海区。
工具类:NotchUtil
公共方法:
`fun hasNotchScreen(activity : Activity) : Boolean` //是否是刘海屏(GoogleAPI+厂商API)
`fun hasNotchScreenO(context: Context): Boolean` //是否是刘海屏(厂商HMOV API)
`fun isHideNotch(context: Context) : Boolean` //是否开启隐藏刘海选项(小米、华为)
`fun setNotchConfig(activity: Activity)` //设置刘海屏,流程同上图方案
......
ScreenUtil新增方法:
`public static int getFullToolBarHeight(Activity activity)` //获取顶部ToolBar的高度
`public static int getFullToastBarHeight(Activity activity)` //获取阅读页顶部Toast的高度
> 这两个方法主要用作适配,对一些特殊机型和特殊情况的处理,防止顶部ToolBar和Toast被刘海遮挡,同时防止ToolBar和Toast高度过高。
来源:CSDN
作者:乎如冯虚御风
链接:https://blog.csdn.net/sakura____/article/details/104360797