在Android中动态设置状态栏颜色无效

时间:2016-10-16 12:23:51

标签: android android-actionbar statusbar android-statusbar

我正在开发一个Android应用程序。在我的应用程序中,我根据来自服务器的颜色代码设置操作栏颜色。设置背景颜色很好并且正常工作。但我也想根据动作栏的颜色代码更改状态栏的颜色。我想使颜色变暗并将其设置在状态栏上,如下面的屏幕截图所示。

enter image description here

我在活动中设置状态栏颜色

private void setStatusBarColor()
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();

            // clear FLAG_TRANSLUCENT_STATUS flag:
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

            // finally change the color
             window.setStatusBarColor(getResources().getColor(R.color.statusBarColor));
        }
    }

但是这次我需要动态改变颜色。我用模拟颜色值测试了但没有工作。请参阅下面的代码。

活动onCreate方法

       teamColorCode = "#EB6343";
        if(teamColorCode!=null && !teamColorCode.isEmpty())
        {
            int color = Color.parseColor(teamColorCode);
            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color));
            //set for action bar
            float[] hsv = new float[3];
            Color.colorToHSV(color,hsv);
            hsv[2] *= 0.8f; // value component
            color = Color.HSVToColor(hsv);
            setStatusBarColor(color);
        }

如您所见,我为teamColorCode变量指定了颜色代码值。然后我尝试使该颜色变暗并设置状态栏的颜色。这是我设置状态栏颜色的方式。

 private void setStatusBarColor(int color)
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();

            // clear FLAG_TRANSLUCENT_STATUS flag:
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

            // finally change the color
            if(color>0)
            {
                window.setStatusBarColor(color);
            }
            else{
                window.setStatusBarColor(getResources().getColor(R.color.statusBarColor));
            }
        }
    }

这就是我得到的:

enter image description here

正如您所看到的,状态栏颜色没有变化。如何更改状态栏颜色使操作栏颜色变暗?

2 个答案:

答案 0 :(得分:2)

我也试图达到相同的效果,为状态栏动态生成深色,所以请看看我是如何做到的。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = this.getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.setStatusBarColor(getDarkColor(Color.GREEN, 0.7));
}

暗色生成方法(当值较低时,您获得的颜色较暗)。

public int getDarkColor(int color, double value) {
    int r = Color.red(color);
    int g = Color.green(color);
    int b = Color.blue(color);
    return Color.rgb((int) (r * value), (int) (g * value), (int) (b * value));
}

答案 1 :(得分:0)

使用此代码更改状态栏颜色(比工具栏颜色更深)

   factor=0.8f; 
    int a = Color.alpha(toolbarcolor);
    int r = Math.round(Color.red(toolbarcolor) * factor);
    int g = Math.round(Color.green(toolbarcolor) * factor);
    int b = Math.round(Color.blue(toolbarcolor) * factor);
    int statusColor=Color.argb(a,
            Math.min(r, 255),
            Math.min(g, 255),
            Math.min(b, 255));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = MainActivity.this.getWindow();
        window.setStatusBarColor(statusColor);
    }

`