Android 中设置them为Theme.AppCompat.Light.NoActionBar时状态栏是灰底白字的。但是如果我们需要白底黑字,该怎么办呢?
方法一、
最简单的办法是在AndroidManifest.xml 中给 <application> 或<activity> 设置theme:
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Light.NoActionBar默认是灰色背景,白色图标-->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimaryDark">#FFFFFF</item> <!--这一句控制状态栏背景颜色-->
<item name="android:windowLightStatusBar" tools:targetApi="m">false</item> <!-- 这一句控制图标颜色:true 图标黑色 ,false 图标白色-->
</style>
</resources>
方法二、
也可以在代码中动态设置状态栏属性,下面是工具类:
package com.example.test
import android.annotation.TargetApi
import android.app.Activity
import android.content.Context
import android.graphics.Color
import android.os.Build
import android.view.View
import androidx.annotation.ColorInt
object StatusbarUtil {
/**
* 获取状态栏高度
*/
fun getStatusBarHeight(context: Context): Int {
val resourceId = context.resources.getIdentifier("status_bar_height", "dimen", "android")
if (resourceId > 0) {
return context.resources.getDimensionPixelSize(resourceId)
}
return 0
}
/**
* 设置状态栏透明
*
*/
fun setStatusBarTransparent(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.window.statusBarColor = Color.TRANSPARENT
}
}
/**
* 设置状态栏背景颜色
*/
fun setStatusBarBgColor(activity: Activity, @ColorInt color: Int) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.window.statusBarColor = color
}
}
/**
* 设置状态栏白色 和 图标黑色
*/
fun lightMode(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.window.statusBarColor = Color.WHITE //白底
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR //黑字
}
}
/**
* 设置状态栏颜色 和 图标颜色
* backgroundColor 背景颜色
* isIconBlack 图标+文本颜色 true 是黑色 false 白色
*/
fun customColorMode(activity: Activity, backgroundColor: String, isIconBlack: Boolean) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.window.statusBarColor = Color.parseColor(backgroundColor) //白底
if (isIconBlack) {
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR //黑色图标+文字
} else {
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE //白色图标+文字
}
}
}
/**
* 设置状态栏透明 是否全屏 图标颜色
*
* isIconBlack true 黑色黑标+文字 false白色
*
* isFullScreen 是否是全屏 true全屏,可以实现沉浸式状态栏
*/
fun transparentMode(activity: Activity, isIconBlack: Boolean, isFullScreen: Boolean = false) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.window.statusBarColor = Color.TRANSPARENT
if (isIconBlack) {
if (isFullScreen) {
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //黑色图标+文字 全屏
} else {
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR //黑色图标+文字
}
} else {
if (isFullScreen) {
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN //白色图标+文字 全屏
} else {
activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
}
}
}
}
}