【问题标题】:Change Toolbar Un-hidden Menu Icon Color更改工具栏非隐藏菜单图标颜色
【发布时间】:2017-03-02 02:11:01
【问题描述】:

如何更改工具栏搜索图标的颜色?我希望它是白色的。我已经用自己的白色可绘制对象进行了更改,但结果仍然是黑色的。我读过this post,但帖子的问题是文本颜色而不是图标颜色。

屏幕截图

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="com.zihadrizkyef.project_katalog_grosirmukenalukis_admin.MainActivity"

    android:id="@+id/activity_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/myToolbar"
        android:layout_height="?android:attr/actionBarSize"
        android:layout_width="match_parent"
        android:background="@color/colorPrimary"
        android:theme="@style/myToolbarTheme"/>

    <ListView
        android:id="@+id/lvProduct"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

style.xml

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <item name="android:buttonStyle">@style/MyButtonStyle</item>
    </style>

    <style name="MyButtonStyle" parent="Base.Widget.AppCompat.Button">
        <item name="android:textAllCaps">false</item>
        <item name="android:background">@drawable/mybutton</item>
        <item name="android:textColor">@color/myWidgetContentColor</item>
    </style>

    <style name="myToolbarTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:textColorPrimary">@color/myWidgetContentColor</item>
    </style>
</resources>

menu_home.xml

<?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"
        app:showAsAction="always"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"
        android:icon="@drawable/ic_action_search"/>
</menu>

【问题讨论】:

  • 你能显示你的菜单文件吗?
  • 您是否尝试过为该图标添加色调?
  • 你能用 mToolBarTheme 替换它的样式并检查吗?
  • 在你的父 AppTheme 样式中添加 @color/white
  • @himanshu1496 对不起,我忘了把菜单xml放在帖子里

标签: android


【解决方案1】:

我得到了答案:

ma​​in_activity.xml

<android.support.v7.widget.Toolbar
    android:id="@+id/myToolbar"
    android:layout_height="?android:attr/actionBarSize"
    android:layout_width="match_parent"
    android:background="@color/colorPrimary"
    android:theme="@style/myToolbarTheme"/>

style.xml

<style name="myToolbarTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorControlNormal">#fff</item>
</style>

【讨论】:

  • 如果你不想改变主题并且只改变searchView颜色那么你可以试试我的答案;)
【解决方案2】:

首先您需要创建自己的菜单,然后将您自己的图标放在菜单项中。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.bruce.example.search.SearchActivity">
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />
<item
    android:id="@+id/action_search"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    android:icon="@drawable/ic_search"
    app:showAsAction="always" />

然后只需覆盖 onCreateOptionsMenu 即可扩展您的自定义菜单。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_search, menu);
    return true;
}

如果您有任何问题,请告诉我

【讨论】:

  • 谢谢。但是很抱歉我已经这样做了,我忘记在帖子中告诉它了。
  • 我使用了自己的白色PNG图标,但结果是黑色
【解决方案3】:

将以下代码放入您的活动的 onCreateOptionsMenu()。

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_home, menu);
        MenuItem favoriteItem = menu.findItem(R.id.action_search);
        Drawable newIcon = (Drawable)favoriteItem.getIcon();
        newIcon.mutate().setColorFilter(Color.argb(255, 200, 200, 200), PorterDuff.Mode.SRC_IN);
        favoriteItem.setIcon(newIcon);
        return true;
    }

您可以在 {Color.argb(255, 200, 200, 200)} 中赋予自己的颜色

【讨论】:

    【解决方案4】:

    创建一个 XML 文件,您可以将其命名为 ic_action_search_white,使用 tint 更改图标颜色。

    <?xml version="1.0" encoding="utf-8"?>
    <bitmap
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/ic_action_search"
        android:tint="@color/white"/>
    

    然后在您的菜单项集android:icon="@drawable/ic_action_search_white" 中,drawable 是刚刚创建的XML 文件。或者您可以通过编程方式设置图标yourSearchMenuItem.setIcon(R.drawable.ic_action_search_white)

    让我知道它是否有效

    【讨论】:

      【解决方案5】:

      将您的AppTheme 更改为以下:

      <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
          <item name="colorPrimary">@color/colorPrimary</item>
          <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
          <item name="colorAccent">@color/colorAccent</item>
          <item name="windowActionBar">false</item>
          <item name="windowNoTitle">true</item>
      
          <item name="android:buttonStyle">@style/MyButtonStyle</item>
      </style>
      

      actionBar变暗会解决你的菜单图标颜色问题。

      更新:新增windowNoTitle设置为true

      【讨论】:

      • 我正在使用 v7 工具栏,它给了我 'java.lang.IllegalStateException: 这个 Activity 已经有一个由窗口装饰提供的操作栏。不要在主题中请求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 以使用工具栏。'
      • 好的,您是否在AppTheme 样式中添加了&lt;item name="windowActionBar"&gt;false&lt;/item&gt;,如答案中所述,如果主题适用于上述棒棒糖,请添加&lt;item name="android:windowActionBar"&gt;false&lt;/item&gt;
      • 抱歉。我没有看到&lt;item name="windowActionBar"&gt;false&lt;/item&gt;。我放了之后,我得到了错误java.lang.IllegalArgumentException: AppCompat does not support the current theme features: { windowActionBar: false, windowActionBarOverlay: false, android:windowIsFloating: false, windowActionModeOverlay: false, windowNoTitle: false }
      • 请查看我更新的答案。刚才我发现我们需要同时使用windowActionBarwindowNoTitle 才能使其工作。
      【解决方案6】:

      在声明 searchView 的地方添加以下方法。

      public Drawable changeDrawableTint(Drawable drawable, int color){
          final Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
          DrawableCompat.setTintList(wrappedDrawable, ColorStateList
                  .valueOf(color));
          return wrappedDrawable;
      }
      

      这两行你已经写好了

      MenuItem searchItem = menu.findItem(R.id.action_search);
      SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
      

      只需添加这一行

      // To change the color of searchView
      searchItem.setIcon(changeDrawableTint(searchItem.getIcon(), Color.WHITE));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-30
        • 2018-07-05
        • 1970-01-01
        • 2019-03-11
        • 2021-07-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多