IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 最新状态栏处理 -> 正文阅读

[移动开发]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())
}

总结

大家可以购买我的新书《Jetpack Compose:Android全新UI编程》进行阅读,里面有完整的 Compose 框架供大家学习。

京东购买地址

当当购买地址

呸呸呸,太不要脸了,又在推荐自己的新书。。。

说了这么多还没放 Github 地址呢:https://github.com/zhujiang521/PlayWeather

如果你在学习或者想要学习关于 Compose 的话,亦或是想学习安卓的小部件,这个项目应该或多或少会对你有点帮助,如果对你有帮助的话,别忘记点个 Star,感激不尽。

其实还有一些细节的东西我没有说到,大家如果有疑问的话可以在评论区提出来。

先写到这里吧,再会!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 17:47:32  更:2021-12-16 17:49:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:38:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码