标题栏和状态栏同色

写了几个子页面,弄了个统一样式的标题栏,Toolbar也用了android:fitsSystemWindows="true",可是还是没有达到我要的效果。

在Theme里面我是这样设置的:

values/styles.xml


values-v19/styles.xml

本想着这样能实现沉浸式状态栏,后来发现不行,标题栏颜色不知道从哪来的这个色,是因为NoActionBar嘛?



百转千回,终于找到一位大神的方法,如下:


public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("BaseActivity", getClass().getSimpleName()+"启动");
        ActivityController.addActivity(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("BaseActivity", "活动销毁:"+getClass().getSimpleName());
        ActivityController.removeActivity(this);

    }

    public void initSystemBar(Boolean isLight) {
        if (Build.VERSION.SDK_INT >= 21) {
            //LAYOUT_FULLSCREEN LAYOUT_STABLE:让应用的主体内容占用系统状态栏的空间;
//            View decorView = getWindow().getDecorView();
//            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
//                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
//            decorView.setSystemUiVisibility(option);
//            getWindow().setStatusBarColor(Color.TRANSPARENT);
            Window window = getWindow();
            //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            //设置状态栏颜色
            if (isLight) {
                window.setStatusBarColor(getResources().getColor(R.color.colorPrimary));
            } else {
                window.setStatusBarColor(getResources().getColor(R.color.colorAccent));
            }

            //状态栏颜色接近于白色,文字图标变成黑色
            View decor = window.getDecorView();
            int ui = decor.getSystemUiVisibility();
            if (isLight) {
                //light --> a|=b的意思就是把ab按位或然后赋值给a,   按位或的意思就是先把ab都换成2进制,然后用或操作,相当于a=a|b
                ui |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            } else {
                //dark  --> &是位运算里面,与运算,  a&=b相当于 a = a&b,  ~非运算符
                ui &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
            }
            decor.setSystemUiVisibility(ui);
        }
    }
}

在BaseActivity中添加initSystemBar方法,在想设置标题栏的Activity中调用,也不是很懂原理,不过最后能实现标题和状态栏同色了:



猜你喜欢

转载自blog.csdn.net/Jay_zjc/article/details/80818122