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状态栏颜色不变的主要内容,如果未能解决你的问题,请参考以下文章