自定义状态栏背景(statusbar) - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 技术分享 >

自定义状态栏背景(statusbar)

发表时间:2021-1-10

发布人:葵宇科技

浏览次数:41


公司大设计师只出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模式下一点点查看出来的):
[img]http://img.blog.csdn.net/20150108140856496

相关案例查看更多