Lif*_*fes 6 android fullscreen navigationbar android-immersive
我按照Android 开发教程操作并获得了全屏粘性沉浸模式。这使得状态栏和导航栏隐藏,直到用户从底部向上或从顶部向下滑动,此时它们会出现并在不使用时慢慢淡出。
问题出在 Android 10(可能还有其他版本)上:屏幕底部的导航栏只是白色图标。没有透明的黑色背景。这使得使用浅色用户界面很难看清。
有没有办法改变导航栏的背景或图标颜色?特别是粘性的沉浸式导航栏,它会出现并消失(因为它太轻,无法与浅色 UI 一起使用)。
我尝试过以编程方式设置样式和颜色,但它们仅在非全屏模式下工作:
<!-- does not work -->
<item name="android:navigationBarColor">@android:color/white</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowLightNavigationBar">true</item>
Run Code Online (Sandbox Code Playgroud)
我也尝试过聆听,OnSystemUiVisibilityChangeListener这样我就可以在导航栏后面显示我自己的透明栏,但它不会触发粘性沉浸模式(如本 SO 帖子和视频中所述):
https://www.youtube.com/watch?v=cBi8fjv90E4&feature=youtu.be&t=6m56s
设置全屏的活动代码(kotlin):
protected fun isFullscreen() = defaultSharedPref.getBoolean(SharedPreferenceKey.IS_FULL_SCREEN, false)
private fun supportsFullscreenMode(): Boolean {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus && isFullscreen()) toggleFullScreenMode(true)
}
/**
* "sticky immersive" full screen mode.
* When user swipes from top/bottom edge, transparent status bar and navigation bar appear and slowly fade out if not used.
* https://developer.android.com/training/system-ui/immersive
*/
protected fun toggleFullScreenMode(goFullScreen: Boolean) {
when {
!supportsFullscreenMode() -> {
makeActivityToast("Your version of Android is too old to support this feature", Toast.LENGTH_LONG).show()
}
goFullScreen -> {
hideSystemUI()
}
!goFullScreen -> {
showSystemUI()
}
}
}
private fun showSystemUI() {
window.decorView.systemUiVisibility = 0
}
private fun hideSystemUI() {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2384 次 |
| 最近记录: |