【Android】解决修改状态栏颜色不生效的问题(6.0以上)

 

通过设置属性去掉导航栏(百度一下一堆),本文主要是解决一些手机上设置状态栏颜色不生效的问题。 

设置状态栏颜色主要通过下列代码

            Window window = context.getWindow();
            View decorView = window.getDecorView();
            int systemUiVisibility = decorView.getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
                if (!isDarkBackground(color)) {
                    systemUiVisibility |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                } else {
                    systemUiVisibility = systemUiVisibility & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                }
            }
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            decorView.setSystemUiVisibility(systemUiVisibility);
            window.setStatusBarColor(Color.TRANSPARENT);

 

判断深色和浅色之后,通过设置SYSTEM_UI_FLAG_LIGHT_STATUS_BAR来设置状态栏图标的颜色是黑色还是白色的。

但是有的手机上发现设置这个属性不生效。 (注:或这个属性的时候是黑色的状态栏,非这个状态栏的时候是白色)

经过一番调研之后发现,这个属性的生效不取决于这个SYSTEM_UI_FLAG_LIGHT_STATUS_BAR,还是取决于statusbar的颜色,但是给状态栏设置颜色之后就不是真正的沉浸式状态栏了,那怎么办呢。我们知道Android的颜色是ARGB,第一个属性是透明度,那只要A是透明的,其实颜色设置成什么样子的都是无所谓的。 

            if (!isDarkBackground(color)) {
                window.setStatusBarColor(0x00FFFFFF);
            } else {
                window.setStatusBarColor(0);
            }

再加上上述代码,完美解决不同手机上对状态栏颜色设置的问题。

 

 

 

 

你可能感兴趣的:(Android)