代码之家  ›  专栏  ›  技术社区  ›  Vince VD

如何更改actionbar中searchview的图标颜色?

  •  1
  • Vince VD  · 技术社区  · 7 年前

    这是我的菜单。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"
        />
    

    这是我的风格。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>
    

    如何更改searchview的图标颜色? 我试图将我物品中的图标设置为drawable,这是一个白色的搜索图标,但我一直是黑色的。 https://imgur.com/a/LCRzt (这是我现在拥有的,但搜索图标需要为白色) https://imgur.com/a/Q65lS (结果是什么)

    我希望它的颜色是白色的,对于其他图标来说是可行的,但对于我的searchview来说不是。

    第二个问题是,当我单击搜索图标时,我的溢出消失了,这正是我想要的,但我最喜欢的图标留在那里,我如何才能使它消失? 我如何使关闭按钮也变为白色,即关闭searchView的小x图标。 https://imgur.com/a/3EBa4 (我现在拥有的) https://imgur.com/a/CbvqR (我想要的) 我如何解决这个问题?

    提前感谢, -文斯

    3 回复  |  直到 7 年前
        1
  •  7
  •   MezzDroid    7 年前

    你需要使用android。支持v7.widget。搜索框

    <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>
    
        2
  •  3
  •   Vince VD    6 年前

    我找到了另一个解决方案来覆盖默认的searchview图标颜色,这样你就不必使用可绘制的。

    @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);
    }
    

    此代码更改默认searchview图标的颜色。

    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
  •  1
  •   Suraj Rao Raas Masood    3 年前

    您可以如下定义searchview的样式:

    <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 />