【问题标题】:The theme doesn't apply with custom action bar主题不适用于自定义操作栏
【发布时间】:2020-12-12 14:08:02
【问题描述】:

我的几乎所有课程都使用Theme.Main,但其中一些需要操作栏中的其他元素。出于这个原因,我创建了自定义操作栏和Theme.CustomTheme

主题:

<style name="Theme.Main" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="colorPrimary">#212121</item>
    <item name="colorPrimaryVariant">#000000</item>
    <item name="colorOnPrimary">#FFFFFF</item>
    <!-- <item name="colorSecondary">#2962FF</item> -->
    <!-- <item name="colorSecondaryVariant">#0039CB</item> -->
    <item name="colorSecondary">#000000</item>
    <item name="colorSecondaryVariant">#000000</item>
    <item name="colorOnSecondary">#FFFFFF</item>
    <item name="colorError">#F44336</item>
    <item name="colorOnError">#FFFFFF</item>
    <item name="colorSurface">#FFFFFF</item>
    <item name="colorOnSurface">#212121</item>
    <item name="android:colorBackground">@color/background</item>
    <item name="colorOnBackground">#212121</item>
</style>

<!-- Custom theme -->
<style name="Theme.CustomTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">#212121</item>
    <item name="colorPrimaryVariant">#000000</item>
    <item name="colorOnPrimary">#FFFFFF</item>
    <!-- <item name="colorSecondary">#2962FF</item> -->
    <!-- <item name="colorSecondaryVariant">#0039CB</item> -->
    <item name="colorSecondary">#000000</item>
    <item name="colorSecondaryVariant">#000000</item>
    <item name="colorOnSecondary">#FFFFFF</item>
    <item name="colorError">#F44336</item>
    <item name="colorOnError">#FFFFFF</item>
    <item name="colorSurface">#FFFFFF</item>
    <item name="colorOnSurface">#212121</item>
    <item name="android:colorBackground">@color/background</item>
    <item name="colorOnBackground">#212121</item>
</style>

带有自定义操作栏的自定义xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/custom_toolbar2"
        style="@style/Widget.MaterialComponents.Toolbar.Primary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="20dp"
            android:text="text"
            android:textColor="@android:color/white"
            android:textSize="18sp"
            android:textStyle="bold" />

    </com.google.android.material.appbar.MaterialToolbar>

</com.google.android.material.appbar.AppBarLayout>

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/appBarLayout" />
</RelativeLayout>

这个类的清单:

<activity android:name=".TestActivity"
    android:theme="@style/Theme.CustomTheme">
</activity>

问题是当我使用自定义操作栏应用自定义主题时,我的状态栏颜色为蓝色。我没有在任何地方指定这种颜色。我相信主题不适用。当我使用没有任何自定义操作栏的Theme.Main 时,一切都很好。有任何想法吗?谢谢。

【问题讨论】:

  • 你能再分享一些代码吗?以便重现它。
  • 类似styles.xml,自定义操作栏的布局文件
  • 我已经更新了我的代码。
  • 谢谢。你的目标是什么安卓版本?

标签: android android-actionbar material-design android-theme android-statusbar


【解决方案1】:

改变状态栏颜色有两种方式

  • XML 把这个属性放在主题里

    &lt;item name="colorPrimaryDark"&gt;#F44336&lt;/item&gt;

API 级别 21 及以上使用

<item name="android:statusBarColor">#F44336</item>
  • 以编程方式

    if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.parseColor("#0288d1")); }

【讨论】:

  • 谢谢。我不确定为什么更改为.NoActionBar 让我指定colorPrimaryDark。更重要的是,我在文档中发现 colorPrimaryDark 在使用 MDC 时已被弃用,最好使用 colorPrimaryVariant 或更明确地使用 android:statusBarColor。嗯,第一个没用,但第二个成功了。
  • 您能给我一些链接以了解更多信息吗?同样对我来说,colorPrimaryDark 就像一个魅力,想知道为什么它不适合你。
  • colorPrimaryDark 为我工作。我只是说它已被文档弃用。它在Color 主题中:material.io/blog/migrate-android-material-components
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多