刘海屏怎么改16比9,怎么让16比9的屏幕满屏

首页 > 经验 > 作者:YD1662024-02-22 16:15:25

可以看到,程序进入了全屏沉浸式体验的效果,并且我们在布局文件中设置的背景图是可以延伸到刘海区域的,这就使得手机屏幕的空间得到了更充分的利用。

现在旋转一下手机屏幕,效果如下图所示:

刘海屏怎么改16比9,怎么让16比9的屏幕满屏(13)

很明显,这比之前在刘海区域空出一条大黑边的用户体验要好上太多了。

不过,虽然现在我们已经实现了让应用程序的内容延伸到刘海区域的功能,却无法保证刘海部分不会影响到应用程序的正常使用。正如上图所看到的一样,沉浸式全面屏带来的问题就是会有一部分操作按钮被遮挡,如果这是一款游戏,那可能这款游戏就完全没法玩了。

因此,对于任何应用程序或者是游戏而言,都需要在这方面进行适配,保证自己的可交互控件绝对不能被刘海区域遮挡住。

那么具体应该如何实现这个功能呢?Android在9.0系统中提供了一套专门用于获取安全显示区域的API,我们只需要确认出哪些位置是有可能被遮挡到的,然后对可交互控件进行相应的位置偏移就可以了,示例代码添加到onCreate()方法中,如下所示:

if (Build.VERSION.SDK_INT >= 28) { mRootCl?.setOnApplyWindowInsetsListener { _, insets -> if (insets.displayCutout!=null){ val left = insets.displayCutout?.safeInsetLeft val top = insets.displayCutout?.safeInsetTop val right = insets.displayCutout?.safeInsetRight val bottom = insets.displayCutout?.safeInsetBottom (mOneBtn?.layoutParams as ConstraintLayout.LayoutParams).setMargins(left!!, top!!, right!!, bottom!!) (mTwoBtn?.layoutParams as ConstraintLayout.LayoutParams).setMargins(left, top, right, bottom) } insets.consumeSystemWindowInsets()

这段代码并没有什么难理解的地方,和刚才所讲解的示例代码是差不多的。只是在得到上下左右方向上的偏移距离之后,我们通过给按钮的layout设置margin的方式来让控件在四个方向上进行相应的偏移。如果你是在开发游戏的话,也可以同样套用这段代码,只是在获取到相应的偏移距离之后,将这几个值传递给游戏层逻辑即可,由游戏层来控制如何对可交互的控件进行偏移。

现在来重新运行一下代码吧,竖屏模式下的结果如下图所示。


刘海屏怎么改16比9,怎么让16比9的屏幕满屏(14)

可以看到,顶部可交互控件自动向下偏移了一段距离,刚好可以保证不被刘海区域遮挡到。

那么再来看一下横屏模式下的结果吧,如下图所示。


刘海屏怎么改16比9,怎么让16比9的屏幕满屏(15)

没有问题,横屏模式下侧边可交互控件自动向右偏移了一段距离,从而也不会被刘海区域遮挡到了。

不过你会发现,在横屏模式下,顶部可交互控件并没有处于屏幕中间的位置,这是因为屏幕的左侧存在刘海,因此DisplayCutout会告诉我们要向左偏移一定的距离。但是我们并没有判断哪些控件需要偏移,哪些控件不需要偏移,而是直接将所有控件都进行偏移,才出现了这种没有居中对齐的情况。

至于解决办法其实并没有什么简单的方式,就是增加逻辑判断即可,在横屏模式下我们可以断定顶部可交互控件是绝对不可能被刘海遮挡到的,因此只需要对侧边可交互控件进行偏移即可,具体的代码我就不再进行演示了。

总结

虽然整篇文章我都一直在使用张雨绮”式的刘海来进行演示,但是我们所使用这种适配方案,是可以保证在任何刘海模式下,你的可交互控件都不会被遮挡到的,感兴趣的话你可以自行切换成其他的刘海模式来进行更多的测试。

好的,关于Android 9.0系统刘海屏的适配就讲到这里,相信你已经可以完全掌握了。

上一页1234末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.