如何更改SearchView元素'颜色?

时间:2016-11-24 12:15:34

标签: android android-theme android-styles android-search

我想在我的项目中使用SearchView,但我遇到了元素问题'颜色。让我告诉你:它的fragmentDialog我有我的SearchView You can see what I mean here

我不需要改变bg颜色。下一张图片就是例如。我想看看没有黑色bg的SearchView元素。 The color of the elements is white

我试过

  • 更改主题
  • 改变风格
  • 改变色彩

但没有任何效果。搜索图标和anoter元素仍然是白色的。也许我失去了什么?我可以用XML做到这一点吗?求你帮帮我。

9 个答案:

答案 0 :(得分:31)

在这个答案中我假设SearchView添加在Toolbar内,而AppThemeTheme.AppCompat.Light.NoActionBar的孩子

<style name="AppTheme.Toolbar" parent="AppTheme">
    <!--This line changes the color of text in Toolbar-->
    <item name="android:textColorPrimary">@color/green</item>
    <!--This line changes the color of icons in toolbar (back, overflow menu icons)-->
    <item name="android:textColorSecondary">@color/green</item>
</style>

现在使用AppTheme.Toolbar作为工具栏的主题。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:popupTheme="@style/AppTheme.PopupOverlay"
    app:theme="@style/AppTheme.Toolbar" />

答案 1 :(得分:21)

您需要在搜索视图中使用android.support.v7.widget.SearchView

尝试使用此样式,

在扩展searchview之前---&gt; enter image description here

扩展searchview ---&gt;

enter image description here

<android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/search_view"
            style="@style/SearchViewStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_centerVertical="true"
            android:layout_gravity="end" />

<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 :(得分:5)

int searchiconId = view.getContext().getResources().getIdentifier("android:id/search_button",null,null);
ImageView imgView = (ImageView)findViewById(searchiconId);
Drawable whiteIcon = img.getDrawable();
whiteIcon.setTint(Color.RED); //Whatever color you want it to be
img.setImageDrawable(whiteIcon);

答案 3 :(得分:4)

尝试将这些行添加到样式中。

android:textColorPrimary更改用户在EditText中输入的文本。 android:textColorSecondary在提示前更改了箭头,“删除文字”十字和小搜索图标。

<item name="android:textColorPrimary">@color/white</item>
<item name="android:textColorSecondary">@color/white</item>

答案 4 :(得分:1)

那么,我的问题是什么。我使用android.widget.SearchView而不是android.support.v7.widget.SearchView。我更改了SearchView,之后提出的解决方案开始起作用。

如果有人能解释为什么风格和不同的东西不起作用或者可以给我一个链接,我将不胜感激。

答案 5 :(得分:1)

支持库随附的

Searchview具有更改图标的功能

<androidx.appcompat.widget.SearchView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:searchIcon="@drawable/ic_search"
            app:closeIcon="@drawable/ic_close_black"
            app:commitIcon=""
            app:goIcon=""
            app:searchHintIcon=""
            app:voiceIcon=""
    >

答案 6 :(得分:0)

您可以在'styles.xml'中使用服装样式修改搜索视图:

<style name="AppSearchView" parent="Widget.AppCompat.SearchView" >
    <!-- Text Size -->
    <item name="android:textSize">@dimen/textSizePrimary</item>
    <!-- Query Text Color -->
    <item name="android:textColorPrimary">@color/textColorPrimary</item>
    <!-- Hint Color -->
    <item name="android:textColorHint">@color/textColorDisabled</item>
    <!-- Icon Color -->
    <item name="android:tint">@color/textColorPrimary</item>
</style>

然后在搜索视图中使用此样式:

<android.support.v7.widget.SearchView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...
    app:theme="@style/AppSearchView" />

答案 7 :(得分:0)

如果要在“搜索”视图中更改放大镜的颜色,这将为您提供帮助。 如果您使用的是Material主题

 ImageView icon = album_search.findViewById(com.google.android.material.R.id.search_button);
        Drawable whiteIcon = icon.getDrawable();
        whiteIcon.setTint(Color.BLACK); //Whatever color you want it to be
        icon.setImageDrawable(whiteIcon);

如果仅将Appcompact主题更改为com.google.android.material.R.id.search_buttonandroid.support.v7.appcompat.R.id.search_button

就这样

答案 8 :(得分:0)

在此答案中,我更改了搜索图标,搜索提示图标,关闭图标,标牌,查询提示颜色,查询颜色的颜色

view!!.findViewById<EditText>(
            searchView.context.resources.getIdentifier(
                "android:id/search_src_text",
                null,
                null
            )
        ).apply {
            setTextColor(ContextCompat.getColor(context!!, R.color.darkThemeIconColor))
            setHintTextColor(ContextCompat.getColor(context!!, R.color.colorAccent))
        }

        view!!.findViewById<ImageView>(
            searchView.context.resources.getIdentifier(
                "android:id/search_button",
                null, null
            )
        ).imageTintList = ColorStateList.valueOf(
            ContextCompat.getColor(context!!, R.color.darkThemeIconColor)
        )
        val mDrawable = SearchView::class.java.getDeclaredField("mSearchHintIcon")
        mDrawable.isAccessible = true
        val drawable = mDrawable.get(searchView) as Drawable
        drawable.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
            ContextCompat.getColor(context!!, R.color.darkThemeIconColor),
            BlendModeCompat.SRC_ATOP
        )
        view!!.findViewById<ImageView>(
            searchView.context.resources.getIdentifier(
                "android:id/search_close_btn",
                null, null
            )
        ).imageTintList = ColorStateList.valueOf(
            ContextCompat.getColor(context!!, R.color.darkThemeIconColor)
        )
        view!!.findViewById<View>(
            searchView.context.resources.getIdentifier(
                "android:id/search_plate",
                null, null
            )
        ).backgroundTintList = ColorStateList.valueOf(
            ContextCompat.getColor(context!!, R.color.darkThemeIconColor)
        )