android 更改材质工具栏中溢出菜单图标的颜色

whhtz7ly  于 2023-08-01  发布在  Android
关注(0)|答案(4)|浏览(150)

我想根据android:theme值更改材质工具栏中溢出菜单图标的颜色。
在这个例子中,我的搜索图标通过一些与app:actionViewClass属性实现相关的魔法受到工具栏主题的影响,但我的信息图标没有。
我的工具栏:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    app:liftOnScroll="true">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
        style="@style/Widget.MaterialComponents.Toolbar.Primary"
        app:title="@string/app_name"
        app:menu="@menu/menu_main"
        app:layout_scrollFlags="scroll|enterAlways|snap"/>

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

字符串
我的菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_search"
        android:icon="@drawable/ic_search_24dp"
        app:showAsAction="always"
        app:actionViewClass="androidx.appcompat.widget.SearchView"
        android:title="TODO" />

    <item android:id="@+id/action_info"
        android:icon="@drawable/ic_info_24dp"
        app:showAsAction="always"
        android:title="TODO" />

</menu>


是否存在简单的解决方案?

wb1gzix0

wb1gzix01#

您可以用途:

<com.google.android.material.appbar.MaterialToolbar
    style="@style/Widget.MaterialComponents.Toolbar.Primary"
    android:theme="@style/MyThemeOverlay_Toolbar"
    ...>

  <style name="MyThemeOverlay_Toolbar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- color used by navigation icon and overflow icon -->
    <item name="colorOnPrimary">@color/myColor</item>
  </style>

字符串

ibps3vxo

ibps3vxo2#

您可以前往材料组件文档,其中有很多关于从库中设置视图每个部分的样式的信息。
在本例中,操作图标tint似乎由colorControlNormal属性设置。
文档-Top app bars

o2rvlv0m

o2rvlv0m3#

也许这个答案来得太晚了,但以防万一其他人需要它,我会在这里张贴我的答案。
如果将属性theme设置为AppBarLayout,而不是MaterialToolbar,您面临的问题就迎刃而解了。
因此,在您的代码中,工具栏应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.AppBarLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"
    app:liftOnScroll="true">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        style="@style/Widget.MaterialComponents.Toolbar.Primary"
        app:title="@string/app_name"
        app:menu="@menu/menu_main"
        app:layout_scrollFlags="scroll|enterAlways|snap"/>

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

字符串
希望这对任何人都有帮助!

waxmsbnn

waxmsbnn4#

关于Actionbar Toolbar MaterialToolbar有很多答案,但示例方法是在代码中设置图标颜色。下面是一些代码,向您展示如何在Activity中设置图标颜色:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.menu_activity_main, menu)

    val iconColor = ContextCompat.getColor(this, R.color.toolbar_action_menu_icon)
    for (index in 0 until menu.size) {
        val menuItem = menu.getItem(index)
        DrawableCompat.setTint(
            menuItem.icon,
            iconColor
        )
    }
    return true
}

字符串
menu_activity_main是菜单文件,toolbar_action_menu_icon是在color.xml文件中定义的菜单图标颜色。

相关问题