android - android.view.View.systemUiVisibility 已弃用。什么是替代品?
问题描述
我已将项目目标 API 版本更新为 30,现在我看到 systemUiVisibility 属性已被弃用。
下面的 kotlin 代码是我正在使用的,它实际上相当于Java 中的setSystemUiVisibility方法。
playerView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
or View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
如果您对此已弃用的代码有任何稳定的替代品,请告诉我。谷歌的建议是使用WindowInsetsController
,但我不知道怎么做。
解决方案
为了兼容性,使用WindowCompat
和WindowInsetsControllerCompat
。您需要将您的 gradle 依赖项升级androidx.core
到至少1.6.0-alpha03
,以便setSystemBarsBehavior
对 SDK < 30 的支持。
private fun hideSystemUI() {
WindowCompat.setDecorFitsSystemWindows(window, false)
WindowInsetsControllerCompat(window, mainContainer).let { controller ->
controller.hide(WindowInsetsCompat.Type.systemBars())
controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
private fun showSystemUI() {
WindowCompat.setDecorFitsSystemWindows(window, true)
WindowInsetsControllerCompat(window, mainContainer).show(WindowInsetsCompat.Type.systemBars())
}
WindowInsets
您可以通过观看此YouTube 视频了解更多信息
对于显示屏顶部有凹槽的设备,您可以将以下内容添加到 v27theme.xml
文件中,使 UI 出现在凹槽的任一侧:
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
您可以在此链接中阅读更多内容:Display Cutout
推荐阅读
- kubernetes - Can not access metalLB from outside
- java - Problems working with files runtime in executable jar
- ios - 需要从超类属性访问子类属性
- python - How to augment long string containing (0,1,2,3,4,5,6,?) by replacing a '?' with the the largest neighboring number?
- reactjs - Firebase cloud messaging onMessage not triggered in React app even after message is sent
- java - Maven编译器插件与Maven默认插件?
- python - 返回带有序列化程序列表的响应 Django REST Framework
- sql - Sum of 2 selects statement in sql with different where Clause
- docker - Nginx proxy and docker 502 bad gateway
- java - How to determine if a thread is main thread in Java?