【问题标题】:How to set the color of icon in Android toolbar?如何设置Android工具栏中图标的颜色?
【发布时间】:2017-04-22 00:27:45
【问题描述】:

我从https://github.com/nglauber/playground/tree/master/android/DemoSearchfork了一个GitHub项目

我想将搜索图标的颜色设置为纯白色。目前搜索图标为灰色,与“Demo Search”的白色文字明显不同。

编辑:

根据一些建议,我使用纯白色(确切地说,RGB=255,255,255)创建了一个新图标,并使用它来代替 android:ic_menu_search。即使原始图标是纯白色,Android 也会用灰色调(通过屏幕截图上的颜色选择器工具验证)。

这表明 Android 故意为图标着色。我希望有一些方法可以让我控制在 Android 工具栏中设置或更改图标颜色

【问题讨论】:

  • 因为这是一个图标资源。您无法更改现有颜色的颜色。您需要将新图标添加到所需颜色的资源中
  • 使用自定义一:你可以在File/New/Vector Asset/Icon找到Drawable Icon Resource。单击图标并选择所需的一个并将其用于ToolBar。您也可以自定义图标的颜色。
  • 更改可绘制图标资源文件属性:android:fillColor="your custom color".
  • 我确实用纯白色更改了另一个自定义图标。我的观察表明,Android 仍会将图标颜色更改为灰色。我相信它与主题、材料设计和着色有关。

标签: android material-design android-toolbar


【解决方案1】:

我找到了自己问题的答案。我决定将其记录下来,以便能够帮助其他 Android 开发人员。

简短的回答是是的,我们可以在Android Toolbar中维护图标颜色,我们需要通过导入资源来做到这一点

  • SVG,或
  • 图标类型为启动器图标的 PNG


原来我遇到的问题是由于

  • PNG,图标类型为操作栏和选项卡图标

在此设置中,Android Studio Image Asset 在保存到 res 项目文件夹时会因某种未知原因稍微改变图标颜色。而安卓在最终显示在屏幕上时会进一步改变图标颜色。最终结果就是我在问题中描述的那样,原本纯白色的图标会变成灰色。

如果我们使用带有图标类型的 SVG 或 PNG 作为启动器图标,图标将不会发生颜色变化。该图标将能够保留其原始颜色。这让我相信这是 Android Studio 中的一个错误,而不是设计指南帮助。


Stack Overflow post 报告了类似的观察结果。 @markj 报告“生成的图像只是无用的灰色形状”。


生成的 Android 环境截图

颜色保持

(SVG) (PNG 作为启动器图标)

颜色变了

(PNG 作为操作栏和标签图标)

【讨论】:

    【解决方案2】:

    您必须制作白色图标并将其添加到menu_search.xmlin res/menu`文件中。

    目前是android:icon="@android:drawable/ic_menu_search"。但是您可以在此处使用自己的图标。然后你可以在res/menu文件中写成android:icon="@drawable/ic_menu_search"

    【讨论】:

      【解决方案3】:

      你必须使用菜单。将 searchView 添加为菜单项

      <?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/menu_search"
          android:title="Search"
          app:actionViewClass="android.support.v7.widget.SearchView"
          app:showAsAction="ifRoom"
          android:orderInCategory="1"
          android:menuCategory="secondary"
          android:visible="true"
      
          />
      
      </menu>
      

      并在您的活动中重写此方法

       @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.menu_main, menu);
          menuItem = menu.findItem(R.id.menu_search);
          searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
          searchView.setIconifiedByDefault(true);
      
          //get search icon View and set your drawable
          ImageView icon = (ImageView)searchView.findViewById(R.id.search_button);
          icon.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_search_white_24dp));
      
      
      
      
          return true;
      }
      

      【讨论】:

        【解决方案4】:

        您只需要更改为使用支持库中的 SearchView 类

        <item
                android:id="@+id/action_search"
                android:icon="@drawable/ic_search_white_24dp"
                android:orderInCategory="2"
                android:title="Search"
                app:actionViewClass="android.support.v7.widget.SearchView"
                app:showAsAction="always" />
        

        【讨论】:

          猜你喜欢
          • 2015-01-07
          • 1970-01-01
          • 2021-12-24
          • 2016-07-01
          • 2021-07-19
          • 1970-01-01
          • 2015-02-22
          • 1970-01-01
          • 2016-02-25
          相关资源
          最近更新 更多