成都做网站公司,企业关键词排名优化哪家好,sem运营有出路吗,域名备案后怎样做网站一、刘海屏适配 1、layoutInDisplayCutoutMode属性 Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 这是一种默认的属性#xff0c;在不进行明确指定的情况下#xff0c;系…
一、刘海屏适配 1、layoutInDisplayCutoutMode属性 Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 这是一种默认的属性在不进行明确指定的情况下系统会自动使用这种属性。这种属性允许应用程序的内容在竖屏模式下自动延伸到刘海区域而在横屏模式下则不会延伸到刘海区域。 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 这种属性表示不管手机处于横屏还是竖屏模式都会允许应用程序的内容延伸到刘海区域。 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 这种属性表示永远不允许应用程序的内容延伸到刘海区域。 2、配置layoutInDisplayCutoutMode的方式
if (Build.VERSION.SDK_INT Build.VERSION_CODES.P) {window.attributes.layoutInDisplayCutoutMode WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
} layoutInDisplayCutoutMode使用默认值即我们不去设置。即使我们不做任何的适配工作绝大多数的程序在默认情况下也是可以自动适配刘海屏手机的并不会产生应用程序无法使用等问题的发生。
但是假如你开发的是一款视频类应用或者游戏的话横屏显示充分利用屏幕的空间明显可以带来更好的用户体验界面上留着一条大黑边对用户总归是不够友好的。这个时候我们就可以通过指定layoutInDisplayCutoutMode属性的值来让应用程序具备更好的屏幕适配性。
红色箭头处有条大黑边。如果我们将layoutInDisplayCutoutMode设置为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES大黑边就会消失。并且设置沉浸式布局
override fun onWindowFocusChanged(hasFocus: Boolean) {super.onWindowFocusChanged(hasFocus)if (hasFocus Build.VERSION.SDK_INT 19) {val decorView window.decorViewdecorView.systemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLEor View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATIONor View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREENor View.SYSTEM_UI_FLAG_HIDE_NAVIGATIONor View.SYSTEM_UI_FLAG_FULLSCREENor View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)}
} 3、需要适配的地方 但是界面上交互的一些按键可能被刘海挡住这样用户就不能点击了。 我们左边的按键被刘海挡住一部分。这种情况就需要我们进行适配了。DisplayCutout类主要用于获取凹口位置和安全区域的位置等。主要方法如下所示
getBoundingRects()返回Rects的列表每个Rects都是显示屏上非功能区域的边界矩形。
getSafeInsetLeft ()返回安全区域距离屏幕左边的距离单位是px。
getSafeInsetRight ()返回安全区域距离屏幕右边的距离单位是px。
getSafeInsetTop ()返回安全区域距离屏幕顶部的距离单位是px。
getSafeInsetBottom()返回安全区域距离屏幕底部的距离单位是px。 适配代码如下
if (Build.VERSION.SDK_INT Build.VERSION_CODES.P) {root_layout.setOnApplyWindowInsetsListener { view, windowInsets -val displayCutout windowInsets.displayCutoutif (displayCutout ! null) {val left displayCutout.safeInsetLeftval top displayCutout.safeInsetTopval right displayCutout.safeInsetRightval bottom displayCutout.safeInsetBottomval leftParams: FrameLayout.LayoutParams btn_left.layoutParams as FrameLayout.LayoutParamsleftParams.setMargins(left, top, right, bottom)}windowInsets.consumeSystemWindowInsets()}
} root_layout是界面的根布局上面代码就是获取安全区域将按钮设置在安全区域以外。 现在按钮就没有被刘海挡住了。
二、non-SDK接口限制 一般来说SDK 接口是指在 Android 框架软件包索引中记录的接口。 对非 SDK 接口的处理是 API 抽象化的实现细节其会随时更改。 Android P 引入了针对非 SDK 接口的新使用限制无论是直接使用还是通过反射或 JNI 间接使用。 无论应用是引用非 SDK 接口还是尝试使用反射或 JNI 获取其句柄均适用这些限制。 名单分类
Light grey list: targetSDKP时警告 Dark grey list:targetSDKP时警告p时不允许调用 Black list:三方应用不允许调用 三、Battery Improvements 谷歌在P版本之前没有一个完整的功耗解决方案OEM厂商分别开发各自的功耗方案管控手段都包括了清理应用功耗得到优化但是同时也影响了三方应用的一些功能正常使用谷歌为了解决这个问题在P版本提出了自己的功耗解决方案。 主要方案 AABAuto Awesome Battery) 1、通过ML算法将应用进行分类不同类型的应用功耗管控策略不一样 2、Firebase Cloud Messaging (FCM):管控三方消息接收的频率 3、谷歌提供了统一的应用的管控方法Forced App Standby (FAS)谷歌不会通过清理应用来优化功耗 Extreme Battery SaverEBS谷歌超级省电模式 Smart screen brightness屏幕亮度调节优化算法。 影响 谷歌功耗方案对三方应用各种管控存在导致应用后台功能无法正常使用的可能特别是IM、邮箱、闹钟、音乐直播、地图导航、运动健康、下载、日历等应用影响比较大。目前通过谷歌提供的调试命令验证所有的应用都有可能会被分到管控的类型对三方的后台功能是有影响的。