【问题标题】:Changing the status bar color for Android 5.0更改 Android 5.0 的状态栏颜色
【发布时间】:2015-04-13 14:34:24
【问题描述】:

我已经阅读了很多关于这个问题的不同帖子,但没有找到任何有效的方法。我希望我的应用与 Android 5.0 及更早版本兼容。

对于 Android 5.0,我正在尝试实现状态栏颜色更改。我知道这不适用于旧版本。但是当我在支持 5.0 的 GenyMotion VM 上运行我的应用程序时,状态栏颜色不会更改为 colorPrimaryDark。它也不会在 Android Studio 的 xml 预览部分改变颜色。

以下是相关文件:

res\values\styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.Base" parent="Theme.AppCompat.NoActionBar">
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryColorDark</item>
        <item name="colorAccent">@color/accentColor</item>
    </style>

</resources>

res\values-v21\styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:colorPrimary">@color/primaryColor</item>
        <item name="android:colorPrimaryDark">@color/primaryColorDark</item>
        <item name="android:colorAccent">@color/accentColor</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:statusBarColor">@color/primaryColorDark</item>
    </style>
</resources>

res\layout\toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/primaryColor"
    >
</android.support.v7.widget.Toolbar>

res\layout\activity_main.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include
        android:id="@+id/tBar"
        layout="@layout/toolbar"></include>

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

MainActivity.java

public class MainActivity extends ActionBarActivity
{
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar=(Toolbar)findViewById(R.id.tBar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle("Login");
    }
    ...
    ...
}

可能的问题:

我想我可能在res\values-v21\styles.xml 中添加了一些不必要的项目。 另外,我认为我应该制作 parent = "@android:style/Theme.Material.Light.DarkActionBar" 但其他教程将其命名为 Base.AppTheme。也可能我需要在 MainActivity.java 中添加更多代码

有人可以帮忙吗?这整个话题让我很困惑。

谢谢

【问题讨论】:

  • 由于您已经在 AppTheme.Base 中定义了您的应用颜色,因此您无需在样式-v21 上再次定义它们,您实际上可以将样式-v21 留空,它应该可以工作。我确定您的问题是您正在覆盖您已经建立的值
  • 很遗憾还是不行……
  • 你使用什么作为应用主题?

标签: android android-5.0-lollipop material-design android-toolbar


【解决方案1】:

您也可以尝试以编程方式更改状态栏颜色:https://developer.android.com/reference/android/view/Window.html#setStatusBarColor(int)

【讨论】:

    【解决方案2】:

    非常简单的程序。你可以通过编程来完成

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

    【讨论】:

      【解决方案3】:

      也许你会觉得很愚蠢,但在我的代码中我有这种经验,你的 v-21 style.xml 应该是这样的

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
      <style name="AppTheme" parent="AppTheme.Base">
          <item name="colorPrimary">@color/primaryColor</item>
          <item name="colorPrimaryDark">@color/primaryColorDark</item>
          <item name="colorAccent">@color/accentColor</item>
      </style>
      </resources>
      

      您也不必在棒棒糖中自动定义状态栏颜色,它是由深色原色创建的。你可以试试这个代码

      【讨论】:

        【解决方案4】:

        如果你有,它不会改变状态栏颜色

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

        从您的应用程序主题中删除这一行是我发现的唯一一个使用 setStausbarColor() 更改状态栏颜色的运行时。

        如果你想用 android:windowTranslucentStatus 改变颜色,那么到目前为止我发现这个教程很有用link

        【讨论】:

          猜你喜欢
          • 2015-05-09
          • 2014-12-16
          • 2016-09-08
          • 2016-02-14
          • 2016-11-05
          • 1970-01-01
          • 1970-01-01
          • 2016-07-06
          • 2015-01-02
          相关资源
          最近更新 更多