【问题标题】:How can i change the icon color of searchview in actionbar?如何更改操作栏中搜索视图的图标颜色?
【发布时间】:2018-05-20 22:03:58
【问题描述】:

这是我的 menu.xml

<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/search_icon"
    android:title="@string/action_search"
    app:actionViewClass="android.widget.SearchView"
    app:showAsAction="always" />

<item
    android:id="@+id/action_favorite"
    android:icon="@drawable/favorite_icon"
    android:title="@string/action_favorite"
    app:showAsAction="always" />


<item
    android:id="@+id/themes"
    android:title="@string/overflow_menu_item"
    app:showAsAction="never">

<menu>
        <item
            android:id="@+id/background1"
            android:title="Red-PinkGradient"
            />
        <item
            android:id="@+id/background2"
            android:title="Red-Gradient"
            />
        <item
            android:id="@+id/background3"
            android:title="Green-Gradient"
            />
        <item
            android:id="@+id/background4"
            android:title="Black-GreyGradient"
            />
</menu>

</item>

<item
    android:title="@string/overflow_menu_item2"
    android:id="@+id/settings"
    />

这是我的styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionOverflowButtonStyle">@style/overFlow</item>
    <item name="searchViewStyle">@style/CustomSearchViewStyle</item>

</style>
<style name="overFlow" parent="@style/Widget.AppCompat.Light.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_overflow_icon</item>
</style>
<style name="CustomSearchViewStyle" parent="Widget.AppCompat.SearchView">
    <item name="queryBackground">@color/white</item>
    <item name="searchIcon">@drawable/search_icon</item>
</style>

如何更改搜索视图的图标颜色? 我试图将我的项目中的图标设置为可绘制的白色搜索图标,但我保持黑色。 https://imgur.com/a/LCRzt(这是我现在拥有的,但搜索图标需要是白色的) https://imgur.com/a/Q65lS(想要的结果)

我希望颜色为白色,它适用于其他图标,但不适用于我的搜索视图。

第二个问题是当我点击搜索图标时,我的溢出消失了,这是我想要的,但我最喜欢的图标仍然存在,我怎样才能让它消失? 我怎样才能让关闭按钮也变成白色,小 x 图标来关闭 searchView。 https://imgur.com/a/3EBa4(我现在拥有的) https://imgur.com/a/CbvqR(我想要的) 我该如何解决这个问题?

提前致谢, -文斯

【问题讨论】:

标签: android android-actionbar menuitem


【解决方案1】:

你需要使用android.support.v7.widget.SearchView

<style name="SearchViewStyle" parent="Widget.AppCompat.SearchView">
    <!-- Gets rid of the search icon -->
    <item name="searchIcon">@drawable/ic_search</item>
    <!-- Gets rid of the "underline" in the text -->
    <item name="queryBackground">@color/white</item>
    <!-- Gets rid of the search icon when the SearchView is expanded -->
    <item name="searchHintIcon">@null</item>
    <!-- The hint text that appears when the user has not typed anything -->
    <item name="queryHint">@string/search_hint</item>
</style>

【讨论】:

  • 所以将 actionViewclass 更改为:android.support.v7.widget.SearchView?
  • 图标变为白色,但第二个问题是我最喜欢的图标仍然显示在操作栏中,我希望它在我点击搜索图标时消失。
  • 用于更改图标的图像
【解决方案2】:

我找到了另一种解决方案来覆盖默认的搜索视图图标颜色,这样您就不必使用可绘制对象了。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater menuInflater = getMenuInflater();
    menuInflater.inflate(R.menu.menu, menu);
    android.support.v7.widget.SearchView searchView = (android.support.v7.widget.SearchView) menu.findItem(R.id.action_search).getActionView();
    ImageView icon = searchView.findViewById(android.support.v7.appcompat.R.id.search_button);
    icon.setColorFilter(Color.WHITE);
    return super.onCreateOptionsMenu(menu);
}

此代码更改默认搜索视图图标的颜色。

android.support.v7.widget.SearchView searchView = (android.support.v7.widget.SearchView) menu.findItem(R.id.action_search).getActionView();
ImageView icon = searchView.findViewById(android.support.v7.appcompat.R.id.search_button);
icon.setColorFilter(Color.WHITE);

【讨论】:

    【解决方案3】:

    您可以为搜索视图定义如下样式:

    <style name="SearchViewStyle" parent="Widget.AppCompat.SearchView">
        //text color
        <item name="android:editTextColor">@color/white</item>
        //icon color
        <item name="android:tint">@color/white</item>
        //cursor color
        <item name="colorAccent">@color/white</item>
        //query search icon color
        <item name="colorControlNormal">@color/sb_light_gray</item>
    </style>
    

    并在您的 xml 中调用它:

    <androidx.appcompat.widget.SearchView
        android:id="@+id/searchview_passage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/SearchViewStyle />
    

    【讨论】:

      猜你喜欢
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2013-04-08
      • 1970-01-01
      相关资源
      最近更新 更多