Android状态栏颜色不变

Posted

技术标签:

【中文标题】Android状态栏颜色不变【英文标题】:Android status bar color not changing 【发布时间】:2017-03-05 21:47:28 【问题描述】:

我的项目中有一个活动和一个片段。在活动中,我设置了整个屏幕的布局,在片段中,我尝试以编程方式更改状态栏颜色。状态栏显示在布局上,但颜色没有改变。

活动:

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));
            
        

【问题讨论】:

试试这个链接***.com/questions/22192291/…和***.com/a/26623245/2784663 ***.com/questions/26496411/… 确保测试 =>21 为什么不直接用xml的方式来做呢? @YLS 我改了但是没用 【参考方案1】:

我猜,问题是你的 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");
    

【讨论】:

@jobin 在setContentView(R.layout. 之前添加requestWindowFeature(Window.FEATURE_NO_TITLE);【参考方案2】:

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

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

【讨论】:

【参考方案3】:

使用此代码

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));
        

【讨论】:

【参考方案4】:

试着做:

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);

【讨论】:

为什么要使用已弃用 ActionBarActivity android 版本 22.1.0,类 ActionBarActivity 已弃用。您应该使用 AppCompatActivity。 @Manikandan K.我试过你的代码,它仍然没有改变 我现在使用 getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getActivity().getWindow().setStatusBarColor(Color.parseColor("#8f1745")); 当我使用上面的代码时,显示状态栏,但颜色没有改变

以上是关于Android状态栏颜色不变的主要内容,如果未能解决你的问题,请参考以下文章

android状态栏颜色修改

Android设置状态栏颜色和状态栏文字、图标颜色

Android如何设置顶部状态栏颜色(主题)

android 怎么设置状态栏字体颜色

Swift-修改状态栏颜色

android沉浸式状态栏变色状态栏透明状态栏修改状态栏颜色及透明