最详细android改变状态栏(任务栏)的颜色,实现图片进入修改栏的效果?

我建议在测试下面的代码的时候自己先新建一个项目,测试下面代码,这样效果清楚点,避免因为粗心而导致效果达不到。
介绍:
最主要还是起到记笔记的作用,功能也比较简单。

第一步:
去除标题栏,在style.xml修改为如下情况。
在这里插入图片描述
修改前的情况:
在这里插入图片描述
修改后的情况:
在这里插入图片描述
可以看到标签栏不见了。(是不是感觉有点啰嗦,最主要是为了详细)。

第二步(重点,前面的一般都知道,现在才是重点,请认真阅读):
去除修改栏的颜色

Window window =this.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(ContextCompat.getColor(this,R.color.white));

在这里插入图片描述
可以看到图中有一个window.setStatusBarColor有一个红色的地方。应该是版本的问题,使用Alter+enter键选择第一个,选择后会出现下图圈中的地方,那个红色就没了。
在这里插入图片描述
如下图红圈处,修改为你需要的颜色,这里我们修改的是白色,在color.xml文件中修改。
在这里插入图片描述
在这里插入图片描述
然后我们先运行一下。
我们可以看到界面全部变为了白色,因为以前状态栏的图标为白色,因为我们这里设置的也是白色,所以我们会发现状态栏的图标会看不清,这样是不是很不好看,下面我就来说一下怎么修改图标的颜色。
在这里插入图片描述
第三步:
修改状态栏图标的颜色
代码如下:

 public void changStatusIconCollor(boolean setDark) {
    
    
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
    
    
            View decorView = getWindow().getDecorView();
            if(decorView != null){
    
    
                int vis = decorView.getSystemUiVisibility();
                if(setDark){
    
    
                    vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                } else{
    
    
                    vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
                }
                decorView.setSystemUiVisibility(vis);
            }
        }
    }

如图所示,写入这个方法,不过不要忘记调用这个方法哦,当true时设置状态栏图标颜色为黑色,false设置状态栏颜色为白色。
在这里插入图片描述
效果如图所示:
在这里插入图片描述
这里效果就完成了

扩展功能
先看一下刚刚我们写的代码实现的效果,可以看到没有达到我们想要的效果。这里我找了张效果比较明显的图(手动滑稽)这个测试可能,可以直接找图片试一下,我太啰嗦了,这里就不细说了。
在这里插入图片描述
首先,删除图中刚刚我们写的红圈中的代码
在这里插入图片描述
第二步,加入蓝圈中的代码
在这里插入图片描述
代码如下:

 if (Build.VERSION.SDK_INT >= 21) {
    
    
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setNavigationBarColor(Color.TRANSPARENT);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }

然后我们看一下效果。
在这里插入图片描述
正好是我想要的效果,到这里我们就可以实现状态栏的修改了,是不是好看很多。

猜你喜欢

转载自blog.csdn.net/qq_45137584/article/details/110503269