自定义状态栏背景(status bar)

公司大设计师只出iOS设计图。新的iOS系统的状态栏(status bar,就是显示时间、电量那个)是透明的,Android 4.4 (Kitkat,api 19)也添加了自定义 status bar 和 navigation bar 的一些api,可以实现同样的效果。

---

github上有 SystemBarTint 可以使用,但是很多功能用不到,所以自己实现了下。

---

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setStatusBarColor(android.R.color.transparent);
        }
    }

    /**
     * 使status bar 和 navigation bar 透明
     */
    private void setStatusBarColor(int colorId) {
        int flags = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
        getWindow().addFlags(flags);

        int statusBarHeight = getStatusBarHeight(this);
        View view = new View(this);
        view.setBackgroundResource(colorId);

        ViewGroup parent = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content);//parent是setContentView(content)中content的父view
        parent.addView(view, ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight);
        parent.getChildAt(0).setPadding(0, statusBarHeight, 0, 0);
    }

    private int getStatusBarHeight(Context context) {
        int id = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        int dimen = 0;
        if (id > 0)
            dimen = getResources().getDimensionPixelSize(id);
        return dimen;
    }
}

---

DecorView的相关知识补充(Debug模式下一点点查看出来的):



--tips

"android.R.id.content", 这个id可以用Hierarchy View找到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值