大家好,本篇文章主要讲的是Android最新状态栏处理介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
前言
Android 中状态栏的处理无非两种,一种是显示隐藏状态栏,另外一种是状态栏字体颜色的修改,之前的写法都已经废弃了,来看看最新的版本中应该如何处理吧。
显示隐藏状态栏
先来看下之前的写法吧:
/**
* 设置透明状态栏
*/
fun Activity.transparentStatusBars() {
val option = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
val vis = window.decorView.systemUiVisibility
window.decorView.systemUiVisibility = option or vis
window.statusBarColor = Color.TRANSPARENT
}
这样看着是没有什么问题,但是。。。来看下代码的截图吧:
发现了没有,咱们一直使用的方法其实都废弃了。。。点击去看下描述:
@deprecated SystemUiVisibility flags are deprecated. Use {@link WindowInsetsController}
可以看到官方让使用 WindowInsetsController
来替换之前的写法,其实 WindowInsetsController
是一个接口,可以通过 ViewCompat.getWindowInsetsController 来进行实例化,来看下如何使用吧:
/**
* 设置透明状态栏
*/
fun Activity.transparentStatusBar() {
val controller = ViewCompat.getWindowInsetsController(window.decorView)
// 隐藏状态栏
controller?.hide(statusBars())
// 设置状态栏颜色为透明
window.statusBarColor = Color.TRANSPARENT
}
状态栏字体颜色修改
同上面一样,先来看下之前的代码:
/**
* 状态栏反色
*/
fun Activity.setAndroidNativeLightStatusBars() {
val decor = window.decorView
if (!isDarkMode()) {
decor.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
} else {
decor.systemUiVisibility =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
}
}
同样看着没有问题,来看下代码的截图吧:
和上面设置显示隐藏状态栏一样,同样是使用 WindowInsetsController
来替换之前的写法:
/**
* 状态栏反色
*/
fun Activity.setAndroidNativeLightStatusBar() {
val controller = ViewCompat.getWindowInsetsController(window.decorView)
controller?.isAppearanceLightStatusBars = !isDarkMode()
}
上面中的 isDarkMode
是我写的一个扩展方法,用来判断当前是否为深色模式,来看下如何实现的吧:
/**
* 获取当前是否为深色模式
* 深色模式的值为:0x21
* 浅色模式的值为:0x11
* @return true 为是深色模式 false为不是深色模式
*/
fun Context.isDarkMode(): Boolean {
return resources.configuration.uiMode == 0x21
}
输入法显示与否
其实官方现在都让咱们使用 WindowInsetsController
来处理状态栏或者导航栏,甚至能处理输入法的显示与否,只需要更换 hide 和 show 的类型即可:
/**
* 隐藏ime
*/
fun Activity.hideIme() {
val controller = ViewCompat.getWindowInsetsController(window.decorView)
controller?.hide(ime())
}
/**
* 显示ime
*/
fun Activity.showIme() {
val controller = ViewCompat.getWindowInsetsController(window.decorView)
controller?.show(ime())
}
总结
说了这么多还没放 Github 地址呢:https://github.com/zhujiang521/PlayWeather
到此这篇关于Android最新状态栏处理介绍的文章就介绍到这了,更多相关Android状态栏处理内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:Android最新状态栏处理介绍


- 详解flutter engine 那些没被释放的东西 2022-12-04
- Android实现监听音量的变化 2023-03-30
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- Android实现轮询的三种方式 2023-02-17
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- Flutter实现底部和顶部导航栏 2022-08-31
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- iOS 对当前webView进行截屏的方法 2023-03-01
- Android studio实现动态背景页面 2023-05-23
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14