Android状态栏颜色不变

时间:2016-10-24 07:34:17

标签: android statusbar

enter image description here我的项目中有一个Activity和一个片段。在Activity我设置的布局采用整个屏幕,在片段中我尝试以编程方式更改状态栏颜色。状态栏显示在布局上,但颜色不会更改。

的活动:

if (Build.VERSION.SDK_INT > 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);

        }

片段:

 if (Build.VERSION.SDK_INT > 16) {
            getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
            if (Build.VERSION.SDK_INT >= 21) {
                Log.e("statusbarcolor","changing..");
                getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(getContext(),R.color.statusBarColor));
            }
        }

4 个答案:

答案 0 :(得分:3)

我猜,问题是你的 Build.VERSION.SDK_INT 部分。

在我的情况下(活动)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    {
        Window window = activity.getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(#54d66a);
    }

答案 1 :(得分:0)

试着这样做:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.BLUE);
}

刚刚使用ActionBarActivity测试了它,它可以正常工作。

注意:如果您的values-v21样式文件已通过以下方式设置,则无需以编程方式设置FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS标志:

<item name="android:windowDrawsSystemBarBackgrounds">true</item>

在您的活动中创建方法

public void updateStatusBarColor(String color){// Color must be in hexadecimal fromat
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(color));
    }
}

从片段中调用此方法

((ActivityName)getActivity()).updateStatusBarColor("#000000")

以下给出我的申请:

..................
 switch (position) {
        case 0 :
            fragment = new SampleOneFragment();
            color = R.color.ColorPrimaryDark;
            break;
        case 1:
            fragment = new SampleOneFragment();
            color = R.color.AlertRed_dark;
            break;
        case 2:
            fragment = new SampleOneFragment();
            color = R.color.ProgressBarPurple_dark;
            break;
    }

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setStatusBarColor(ContextCompat.getColor(this, color));
    }  
    replaceFragment(fragment);
}

答案 2 :(得分:0)

我终于做到了。我只是在片段中使用了以下代码:

getActivity().getWindow().clearFlags(WindowManager.FLAG_FULL_SCREEN);

答案 3 :(得分:0)

使用此代码

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {

            Window window = getWindow();
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.setStatusBarColor(getResources().getColor(R.color.my_statusbar_color));
        }