更改Android 5.0的状态栏颜色

时间:2015-02-12 18:01:03

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

我已经阅读了很多关于这个问题的不同帖子,但没有发现任何有用的信息。我希望我的应用与Android 5.0和旧版本兼容。

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

以下是相关文件:

RES \值\ 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 \值-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 \布局\ 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 \布局\ 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&#34;但其他教程将其作为Base.AppTheme。我也可能需要在MainActivity.java

中添加更多代码

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

由于

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

非常简单的程序。你可以以编程方式做到这一点

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

答案 2 :(得分:0)

也许你会发现非常愚蠢,但在我的代码中我有这种经验,你的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>

你也不必在棒棒糖中自动定义状态栏颜色,它是从Dark Primary Color创建的。您可以尝试此代码

答案 3 :(得分:0)

如果你有

,它不会改变状态栏颜色
<item name="android:windowTranslucentStatus">true</item>

从应用主题中删除此行是我发现使用setStausbarColor()时尚未更改状态栏颜色t运行时。

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