主题不适用于自定义操作栏
The theme doesn't apply with custom action bar
我几乎所有 class 都使用 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>
此 class 的清单:
<activity android:name=".TestActivity"
android:theme="@style/Theme.CustomTheme">
</activity>
问题是,当我应用带有自定义操作栏的自定义主题时,我的状态栏颜色为蓝色。我没有在任何地方指定这种颜色。我相信这个主题不适用。当我在没有任何自定义操作栏的情况下使用 Theme.Main
时,一切都很好。有任何想法吗?谢谢。
可以通过两种方式更改状态栏颜色
XML
把这个属性放在主题里
<item name="colorPrimaryDark">#F44336</item>
API 21 级及以上使用
<item name="android:statusBarColor">#F44336</item>
程序化
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.parseColor("#0288d1")); }
我几乎所有 class 都使用 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>
此 class 的清单:
<activity android:name=".TestActivity"
android:theme="@style/Theme.CustomTheme">
</activity>
问题是,当我应用带有自定义操作栏的自定义主题时,我的状态栏颜色为蓝色。我没有在任何地方指定这种颜色。我相信这个主题不适用。当我在没有任何自定义操作栏的情况下使用 Theme.Main
时,一切都很好。有任何想法吗?谢谢。
可以通过两种方式更改状态栏颜色
XML 把这个属性放在主题里
<item name="colorPrimaryDark">#F44336</item>
API 21 级及以上使用
<item name="android:statusBarColor">#F44336</item>
程序化
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setStatusBarColor(Color.parseColor("#0288d1")); }