android设置状态栏颜色(沉浸式状态栏)

本文介绍了在Android4.4及以上版本设置状态栏颜色的方法,包括三种方式,并提到使用开源项目SystemBarTintManager。设置状态栏颜色时,需注意布局文件中`android:clipToPadding`和`android:fitsSystemWindows`属性的使用,以避免颜色重叠问题。布局需设定颜色或背景,否则状态栏将显示默认颜色。

设置状态栏颜色的方法是andorid4.4以后支持的,最少要api19以上才可以使用哟。
方法如下:

第一种↓

        public static void setStatusBarTranslucent(ViewGroup vg, Activity activity) {
        // 如果版本在4.4以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 状态栏高度
            int height = getStatusBarHeight(activity);
            if (height <= 0) {
                return;
            }
            // 设置距离顶部状态栏垂直距离
            vg.setPadding(0, height, 0, 0);
            // 状态栏透明
            activity.ge tWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 导航栏透明
//            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
    }

    public static int getStatusBarHeight(Activity activity) {
        int height = 0;
        int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen",
                "android");
        if (resourceId > 0) {
            height = activity.getResources().getDimensionPixelSize(resourceId);
        }
        return height;
    }

第二种↓

private static void setStatusBarTranslucent(ViewGroup vg, Activity activity, int color) {
         // 如果版本在4.4以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 状态栏高度
            int height = getStatusBarHeight(activity);
            if (height <= 0) {
                return;
            }
            View statusBarView = new View(activity);  
            ViewGroup.LayoutParams lp = new 
                    ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,  
                    getStatusBarHeight(activity));  
            statusBarView.setBackgroundColor(color);  
            // 给布局添加一个状态栏高度,自定义颜色的View
            vg.addView(statusBarView, lp);  
            // 状态栏透明
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        } 
    }

第三种↓

public static void setStatusBarTranslucent(Activity activity,int color) {
        // 如果版本在4.4以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            // 状态栏透明
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            SystemBarTintManager tintManager = new SystemBarTintManager(activity);
            tintManager.setStatusBarTintEnabled(true);
            tintManager.setStatusBarTintResource(color);
        }
     }

SystemBarTintManager 是一个开源项目方法,地址是:https://github.com/jgilfelt/SystemBarTint


第2,3种方法
需要在布局文件中加入下面两个属性:

android:clipToPadding=”true”
android:fitsSystemWindows=”true”

android:clipToPadding 定义布局间是否有间距
android:fitsSystemWindows 这个属性,主要是通过调整当前设置这个属性的view的padding去为我们的status_bar留下空间。

如果你不写,那么状态栏就会出现颜色重叠。

注意:以上几种方法布局必须设置了颜色或者背景,否则状态栏将会显示默认的灰白色。
如果设置的是透明效果颜色的话,状态栏底层也会显示一层灰白色,会与设置的背景进行叠加。

以上就是设置状态栏颜色的几种方法,可以根据需要进行选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值