【问题标题】:Change statusbar color on Fragment change [Android Lollipop]在片段更改时更改状态栏颜色 [Android Lollipop]
【发布时间】:2014-11-04 19:07:38
【问题描述】:

我想知道如何根据当前活动的片段(在 5.0 Lollipop 上)更改状态栏颜色。目前,我根据我所在的 Fragment 更改 ActionBar 颜色,但现在我希望 StatusBar 颜色也更改 - 为了在 Lollipop 设备上看起来不错。

我尝试使用 setStyle 以编程方式根据片段更改主题,但它似乎没有更改状态栏颜色。

任何想法都将不胜感激!

【问题讨论】:

  • 你能展示你试过的代码吗?
  • 有点乱,但本质上我有一个 FragmentData 对象,它存储我想要的每个片段的样式(除其他外)。每当片段更改时,我将 setStyle 设置为我在该对象中拥有的 mStyle 字段。只是一个旁注:这是改变操作栏颜色的工作,只是状态栏颜色似乎没有设置。
  • 是的,当然。这不仅适用于我 - 它适用于任何阅读问题的人。
  • 对,这是我现在使用的一段代码:if (fragmentData != null) { updateActionBarForFragment(fragmentData); mStyle = fragmentData.getStyle(); } setTheme(mStyle);

标签: android android-layout android-fragments android-5.0-lollipop


【解决方案1】:

您是否尝试过使用Window.setStatusBarColor 更改状态栏的颜色?例如,您可以执行以下操作以编程方式将状态栏颜色更改为红色。

getWindow().setStatusBarColor(Color.RED);

setStatusBarColor 的文档可以在here 找到。您还可以阅读有关如何Customize the Status Bar 的文档。

注意:此方法仅适用于 Lollipop 或以上版本。

如果您看到意外的颜色,请确保您传递的整数值是 颜色整数,而不是资源 ID。

getWindow().setStatusBarColor(getResources().getColor(R.color.custom_color)); // RIGHT
getWindow().setStatusBarColor(R.color.custom_color); // WRONG

【讨论】:

  • 所以,getWindow().setStatusBarColor(...) 可以更改状态栏颜色,但它没有设置正确的颜色。例如,当我将状态栏颜色设置为橙色时,它会显示为紫色。知道发生了什么吗?
  • 有没有办法在 android 4.4 中做同样的事情?
  • @AminKeshavarzian 您必须使用 app compact,并在您的样式或主题 xml 中执行 `@color/BackgroundColor' 以支持 android 4.4 设备。
  • 在 API 21 中可以通过编程方式更改状态栏的颜色吗?我想在小于 21 的 API 中以编程方式更改颜色,可以吗?
猜你喜欢
  • 1970-01-01
  • 2016-09-08
  • 2015-05-09
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 2016-11-05
  • 2015-04-13
  • 1970-01-01
相关资源
最近更新 更多