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编程实现在Activity中操作刷新另外一个Activity数据列表的方法
这篇文章主要介绍了Android编程实现在Activity中操作刷新另外一个Activity数据列表的方法,结合具体实例形式分析了2种常用的Activity交互实现技巧,需要的朋友可以参考下2017-06-06Android RadioGroup 设置某一个选中或者不可选中的方法
下面小编就为大家带来一篇Android RadioGroup 设置某一个选中或者不可选中的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-04-04Android组件DrawerLayout仿网易新闻v4.4侧滑菜单
这篇文章主要为大家详细介绍了Android组件DrawerLayout仿网易新闻v4.4侧滑菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-01-01
最新评论