在Android的SearchView中,是否可以更改文本颜色?

144

SearchView元素没有更改文本颜色的任何属性。默认文本颜色是黑色,不适用于我们的深色背景。有没有一种方法可以更改文本颜色,而不必诉诸hack?

我发现了一个类似的问题,与更改文本大小有关,但到目前为止,它还没有任何答案:如何设置SearchView TextSize?


请提及您尝试过的内容。 - Sahil Mahajan Mj
是的,这是可能的。看看这个链接:https://dev59.com/hGMl5IYBdhLWcg3woYEu#66246372 - KennyAli
38个回答

0

对我有效的方法

((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));

0

我从一篇博客文章中找到了解决方案。请查看这里

基本上,您可以为searchViewAutoCompleteTextView设置样式,并使android:actionBarWidgetTheme继承该样式。


0
searchView = (SearchView) view.findViewById(R.id.searchView);

SearchView.SearchAutoComplete searchText = (SearchView.SearchAutoComplete) searchView
      .findViewById(org.holoeverywhere.R.id.search_src_text);
searchText.setTextColor(Color.BLACK);

我正在使用Holoeverywhere库。请注意org.holoeverywhere.R.id.search_src_text


0

针对 Kotlin 语言

    searchView = view.findViewById(R.id.searchView_Contacts)
    // change color
    val id = searchView.context.resources
        .getIdentifier("android:id/search_src_text", null, null)

    val textView = searchView.findViewById<View>(id) as TextView

    textView.setTextColor(Color.WHITE)

-1
您可以实现这样的类来更改字体颜色和图像:
import com.actionbarsherlock.widget.SearchView;
import com.actionbarsherlock.widget.SearchView.SearchAutoComplete;


public class MySearchView {
    public static SearchView getSearchView(Context context, String strHint) {
        SearchView searchView = new SearchView(context);
        searchView.setQueryHint(strHint);
        searchView.setFocusable(true);
        searchView.setFocusableInTouchMode(true);
        searchView.requestFocus();
        searchView.requestFocusFromTouch();

         ImageView searchBtn = (ImageView) searchView.findViewById(R.id.abs__search_button);
         searchBtn.setImageResource(R.drawable.ic_menu_search);


         ImageView searchBtnClose = (ImageView) searchView.findViewById(R.id.abs__search_close_btn);
         searchBtnClose.setImageResource(R.drawable.ic_cancel_search_bar);


         SearchAutoComplete searchText = (SearchAutoComplete) searchView.findViewById(R.id.abs__search_src_text);

        searchText.setTextColor(context.getResources().getColor(color.white));

        return searchView;
    }


    public static SearchView getSearchView(Context context, int strHintRes) {
        return getSearchView(context, context.getString(strHintRes));
    }
}

希望能对你们有所帮助。 :D


-2

这样就可以了 :)

View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate!=null) {
    searchPlate.setBackgroundColor(Color.DKGRAY);
    int searchTextId = searchPlate.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
    TextView searchText = (TextView) searchPlate.findViewById(searchTextId);
    if (searchText != null) {
        searchText.setTextColor(Color.WHITE);
        searchText.setHintTextColor(Color.WHITE);
    }
}
return ;
}

虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - rollstuhlfahrer
感谢您的帮助。 - Qais

-2

我尝试并找到了一个解决方案。我认为它会对你有所帮助。

searchView.setBackgroundColor(Color.WHITE);

enter image description here


2
问题是关于文本颜色而不是背景颜色。 - Guillaume

-3
SearchView 强制转换为 TextView,可以使用 TextView 的方法来改变其颜色:
((TextView) searchView).setTextColor(Color.WHITE);
((TextView) searchView).setHintTextColor(Color.WHITE);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接