Android控制状态栏颜色的两种方式

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
                }
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值