Android 界面优化一:系统状态栏隐藏和拓展到状态栏

记得刚接手公司的项目的时候,系统状态栏是白的,字也是白的,随后自己研究了一通,最终弄好了,还分为两部分,主要是把背景拓展到状态栏下,并且不遮盖状态栏的信息。最后写了一种可遮盖掉整个状态栏

主要是通过setStatusBar来实现此功能,分为黑色跟白色两种,白色即为默认颜色,不写就行。

使用的时候直接在onCreate方法中直接调用即可;

下面是代码:

protected void setStatusBar() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//隐藏状态栏但不隐藏状态栏字体
        }
    }

若要黑色请加入下面这行:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//实现状态栏文字颜色为黑色

还可选择隐藏掉整个状态栏:

//隐藏状态栏,并且不显示字体
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

/**
 * 沉浸式状态栏
 *
 * @param activity
 */
public void fullScreen(Activity activity) {
    //        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
    //            try {
    //                Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");
    //                Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");
    //                field.setAccessible(true);
    //                field.setInt(getWindow().getDecorView(), Color.TRANSPARENT);  //改为透明
    //            } catch (Exception e) {}
    //        }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色
            Window window = activity.getWindow();
            View decorView = window.getDecorView();
            //两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor( Color.WHITE);
            //导航栏颜色也可以正常设置
            //                window.setNavigationBarColor(Color.TRANSPARENT);
        } else {
            Window window = activity.getWindow();
            WindowManager.LayoutParams attributes = window.getAttributes();
            int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
            int flagTranslucentNavigation = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
            attributes.flags |= flagTranslucentStatus;//设置全屏
            attributes.flags |= flagTranslucentNavigation;//设置是否显示标题栏
            window.setAttributes(attributes);
        }
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//android6.0以后可以对状态栏文字颜色和图标进行修改
        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    }
}
 

你可能感兴趣的:(Android)