Android之沉浸式状态栏

首先什么是沉浸式呢?我的理解就是 状态栏融入到整个页面之中,使其看起来协调一致。


首先看下没有做沉浸式的页面

页面可能给人感觉生硬


再看一下做了沉浸式的页面


上面两种都是沉浸式,个人感觉还是可以的


下面说下如何做出沉浸式的效果吧

这个类可以直接黏贴使用

/**
 * 作者: CoolTone
 * 描述: 沉浸式状态栏
 */
public class StatusBarCompat {
    private static final int INVALID_VAL = -1;
    private static final int COLOR_DEFAULT = Color.parseColor("#20000000"); // 默认色值

    // 使用自己的颜色
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public static void compat(Activity activity, int statusColor) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (statusColor != INVALID_VAL) {
                activity.getWindow().setStatusBarColor(statusColor);
            }
            return;
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
            int color = COLOR_DEFAULT;
            ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
            if (statusColor != INVALID_VAL) {
                color = statusColor;
            }
            View statusBarView = new View(activity);
            ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    getStatusBarHeight(activity));

            statusBarView.setBackgroundColor(color);
            contentView.addView(statusBarView, lp);
        }
    }

    // 使用默认颜色
    public static void compat(Activity activity) {
        compat(activity, INVALID_VAL);
    }

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


里面有 compat 方法

方法 compat (Activity activity , int statusColor ) 是使用自己设置的颜色

方法 compat (Activity activity) 是使用默认的颜色,这里默认色值上面也有标注


使用时我们在 onCreate( ) 方法中调用即可

StatusBarCompat.compat(this, getResources().getColor(R.color.black_1)); // 沉浸式



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值