首页 > 解决方案 > 如何在 android 中以编程方式更改 Widget.Toolbar 主题?

问题描述

 toolbar.getContext().setTheme(R.style.ToolBarStyleDark);

这是我在onCreate. 我得到的结果是这样的

它以某种方式仅更改文本背景而不是整个工具栏背景。调用 super.setTheme(darkmode ? R.style.AppTheme : R.style.DarkTheme); 完美地改变了应用程序主题,但不适用于工具栏。

这是工具栏 XML 的样式:

 <style name="ToolBarStyle" parent="@style/ThemeOverlay.AppCompat.ActionBar">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
    <item name="actionMenuTextColor">@android:color/white</item>
    <item name="android:background">@color/colorPrimary</item>

</style>
<style name="ToolBarStyleDark" parent="@style/ThemeOverlay.AppCompat.ActionBar">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
    <item name="actionMenuTextColor">@android:color/white</item>
    <item name="android:background">@color/colorPrimary2</item>

</style>

这是在activity_main.xml 中定义的工具栏

    <androidx.appcompat.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/toolbar"
    app:theme="@style/ToolBarStyle"
    android:elevation="4dp"
    >
    <ImageButton
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:background="@drawable/copy"
        android:onClick="showView"
        android:layout_gravity="right"
        />


    </androidx.appcompat.widget.Toolbar>

手动更改 App:theme 可以按预期工作,但代码会出错。

标签: javaandroidxmltoolbar

解决方案


推荐阅读