Можно ли изменить цвет текста в Android SearchView?

Элемент SearchView не имеет свойств для изменения цвета текста. Цвет текста по умолчанию черный и не работает на нашем темном фоне. Есть ли способ изменить цвет текста, не прибегая к хитростям?

Я нашел аналогичный вопрос, связанный с изменением размера текста, но пока на него нет ответов: Как установить SearchView TextSize?


person CACuzcatlan    schedule 04.07.2012    source источник
comment
пожалуйста, укажите, что вы пробовали.   -  person Sahil Mahajan Mj    schedule 31.12.2012
comment
Да, это возможно. Проверьте это: stackoverflow.com/questions/18259707/   -  person KennyAli    schedule 17.02.2021


Ответы (35)


Добавлять

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

к родительской теме, и это должно изменить введенный текст. Вы также можете использовать

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

чтобы изменить текст подсказки для SearchView. (Обратите внимание, что вы можете заменить @android:color/white любым подходящим значением, которое надеетесь использовать)

person akdotcom    schedule 12.11.2014
comment
Это исправило это для меня и не потребовало каких-либо сложных махинаций с использованием отражения. Также работает с appcompat. - person dj_bushido; 04.01.2015
comment
Вы также можете установить android: theme в searchview в стиль, содержащий элемент android: editTextColor. Таким образом, вы повлияете только на этот поиск. - person Pepijn; 26.08.2015
comment
Оно работает! Я использовал вид поиска внутри панели инструментов, расширенный ThemeOverlay.AppCompat.Light, добавил указанный выше элемент и установил стиль для виджета панели инструментов;) Работает как шарм ... - person codename_47; 02.12.2015
comment
Мне это решение не подходит. Текст по-прежнему имеет неправильный цвет. Ответ ниже с установкой цвета подсказки программно сработал для меня. - person Dominik; 04.03.2017
comment
Вы гениальный приятель ... спасибо за отличное решение. - person Kuldeep Kumar; 21.04.2017
comment
Это изменит цвет всего текста редактирования во всем приложении. т.е. изменить цвет всего текста редактирования. не только для Searchview. :( - person Dharmishtha; 16.06.2017
comment
Спасибо. Используйте это в настраиваемой теме, примените тему к любому желаемому действию. - person Devidas M Das; 12.01.2018
comment
Проблема с этим ответом в том, что он также изменит цвет текста ваших EditTexts. Единственное сработавшее для меня решение, изменяющее только цвет текста SearchView, находится здесь: stackoverflow.com/a/40550067/1617737 - person ban-geoengineering; 30.07.2018
comment
Мне это помогает ... Спасибо. - person Pooja; 11.10.2019
comment
Это должен быть принятый ответ, все остальные либо взломаны, либо слишком сложны для простого решения. - person Akash Bisariya; 17.01.2020

Попробуйте что-то вроде этого: вы получите дескриптор текстового представления из sdk, а затем измените его, поскольку они не раскрывают его публично.

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);
person lokoko    schedule 16.01.2013
comment
Это всегда возвращает null - person danielrvt-sgb; 15.08.2013
comment
Обратите внимание, что если вы используете ActionBarSherlock, идентификаторы представления будут другими. Например, библиотека в настоящее время устанавливает идентификатор текста редактирования в package: id / abs__search_src_text, к которому можно получить доступ напрямую через R.id.abs__search_src_text. - person greg7gkb; 19.09.2013
comment
Кроме того, что я действительно хотел изменить, так это цвет текста подсказки SearchView, который легко делается с помощью textView.setHintTextColor (). - person greg7gkb; 19.09.2013
comment
Это очень грязный прием. Используйте android: editTextColor и android: textColorHint вместо предложенного akdotcom - person Philipp Hofmann; 06.08.2015
comment
stackoverflow.com/a/27156681/6021740 - person Kidus Tekeste; 17.12.2020
comment
Для AndroidX вам нужно будет использовать searchView.findViewById<TextView>(androidx.appcompat.R.id.search_src_text), чтобы найти TextView - person René Jörg Spies; 20.07.2021

У меня это работает.

SearchView searchView = (SearchView) findViewById(R.id.search);
EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));
person user2331095    schedule 07.05.2015
comment
Это также работает, если вы получаете представление как TextView или даже как AutoCompleteTextView. - person Juan José Melero Gómez; 07.07.2015
comment
Да, это работа для меня после предложения @ JuanJoséMeleroGómez - person Parth Patel; 28.08.2018
comment
Полагаю, это было скопировано и сокращено из моего ответа здесь: stackoverflow.com/a/26251197/2914140. - person CoolMind; 24.03.2019

Благодаря @CzarMatt я добавил поддержку AndroidX.

Для меня работает следующее. Я использовал код из ссылки: Изменить текст цвет подсказки поиска на панели действий с использованием библиотеки поддержки.

    searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    EditText txtSearch = ((EditText)searchView.findViewById(androidx.appcompat.R.id.search_src_text));
    txtSearch.setHint(getResources().getString(R.string.search_hint));
    txtSearch.setHintTextColor(Color.LTGRAY);
    txtSearch.setTextColor(Color.WHITE);

Изменение цвета текста подсказки searchview на панели действий предлагает другое решение. Он работает, но устанавливает только текст и цвет подсказки.

    searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));
person CoolMind    schedule 08.10.2014
comment
Используйте androidx.appcompat.R.id.search_src_text, если вы перенесли свой проект на AndroidX. - person CzarMatt; 04.11.2019

Я хотел сделать что-то подобное. Наконец, мне пришлось найти TextView среди SearchView детей:

for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
    textView.setTextColor(Color.WHITE);
}

Если вам нужен метод util:

public static <V extends View> Collection<V> findChildrenByClass(ViewGroup viewGroup, Class<V> clazz) {

    return gatherChildrenByClass(viewGroup, clazz, new ArrayList<V>());
}

private static <V extends View> Collection<V> gatherChildrenByClass(ViewGroup viewGroup, Class<V> clazz, Collection<V> childrenFound) {

    for (int i = 0; i < viewGroup.getChildCount(); i++)
    {
        final View child = viewGroup.getChildAt(i);
        if (clazz.isAssignableFrom(child.getClass())) {
            childrenFound.add((V)child);
        }
        if (child instanceof ViewGroup) {
            gatherChildrenByClass((ViewGroup) child, clazz, childrenFound);
        }
    }

    return childrenFound;
}
person Ferran Maylinch    schedule 07.05.2014
comment
Я тоже получал нулевое исключение с предыдущими решениями, и это сработало для меня! - person Diego Ponciano; 14.08.2014
comment
Это должно быть отмечено как принятый ответ. Вышеупомянутый дает ноль. Спасибо за хорошую работу, дружище :) - person blueware; 20.04.2015
comment
Это решение настолько отвратительное, но оно единственное, что действительно работает, и виновата команда Android! - person Ofek Ron; 10.11.2015
comment
Как нам получить доступ к этому значку поиска? - person Yasin Yaqoobi; 20.09.2016
comment
УДИВИТЕЛЬНЫЙ ! Лучшее решение на свете ... весь этот xml-дизайн ... - person Stav Bodik; 28.12.2020

Лучше всего это достигается с помощью нестандартных стилей. Перегрузите стиль виджета панели действий своим собственным стилем. Для голографического освещения с темной панелью действий поместите это в свой собственный файл стилей, например res/values/styles_mytheme.xml:

<style name="Theme.MyTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarWidgetTheme">@style/Theme.MyTheme.Widget</item>
    <!-- your other custom styles -->
</style>

<style name="Theme.MyTheme.Widget" parent="@android:style/Theme.Holo">
    <item name="android:textColorHint">@android:color/white</item>
    <!-- your other custom widget styles -->
</style>

Убедитесь, что ваше приложение использует настраиваемую тему темы, как описано в введите описание ссылки здесь

person johnarleyburns    schedule 20.04.2014

Вы можете сделать это, установив атрибут editTextColor в стиле.

<style name="SearchViewStyle" parent="Some.Relevant.Parent">
    <item name="android:editTextColor">@color/some_color</item>
</style>

и вы применяете этот стиль к Toolbar или SearchView в макете.

<android.support.v7.widget.Toolbar
    android:theme="@style/SearchViewStyle">

    <android.support.v7.widget.SearchView />

</android.support.v7.widget.Toolbar>
person oldergod    schedule 14.10.2016
comment
+1 Это превосходит все решения, связанные с findViewById imho. По возможности следует использовать стили просмотра. - person Mattias; 06.07.2017
comment
Это должен быть принятый ответ! Очень чисто и просто. - person MSeiz5; 16.07.2019

Вы можете изменить цвет по умолчанию, используя атрибут android:theme в представлении.

Если вы используете Toolbar или MaterialToolbar:

<com.google.android.material.appbar.MaterialToolbar
    android:theme="@style/ThemeOverlay.Toobar"
    ...>

or:

<androidx.appcompat.widget.Toolbar
    android:theme="@style/ThemeOverlay.Toobar"
    ...>

где наложение темы с темой компонентов материала:

<style name="ThemeOverlay.Toobar" parent="ThemeOverlay.MaterialComponents.Toolbar.Primary">
    <!-- Text color -->
    <item name="android:editTextColor">@color/....</item>
    <!-- Hint text color -->
    <item name="android:textColorHint">@color/...</item>
</style>

с темой AppCompat:

<style name="ThemeOverlay.Toobar" parent="ThemeOverlay.AppCompat.Light.*">
    <!-- Text color -->
    <item name="android:editTextColor">@color/....</item>
    <!-- Hint text color -->
    <item name="android:textColorHint">@color/...</item>
</style>

введите описание изображения здесь


Если вы используете в макете SearchView, вы можете сделать что-то подобное:

   <androidx.appcompat.widget.SearchView
       android:theme="@style/ThemeOverlay.SearchView"

с участием

   <style name="ThemeOverlay.SearchView" parent="">
        <!-- Text color -->
        <item name="android:editTextColor">@color/...</item>
        <!-- Hint text color -->
        <item name="android:textColorHint">@color/...</item>
    </style>

введите описание изображения здесь

person Gabriele Mariotti    schedule 18.07.2020
comment
Cheerio! Это должен быть принятый ответ! Спасибо друг! :) - person Jagadish Nallappa; 17.06.2021

если вы используете - android.support.v7.widget.SearchView

SearchView searchView = (SearchView) item.getActionView();
EditText editText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
editText.setTextColor(Color.WHITE);

в Котлине

val searchView = SearchView(this)
val editText = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
editText.setTextColor(Color.WHITE)

Вам лучше начать использовать библиотеки поддержки androidx сейчас

person zankoav    schedule 09.03.2017

Создайте стиль для своего Toolbar

<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.ActionBar">
    <item name="android:editTextColor">@color/some_color</item>
</style>

И установите его в качестве темы для Toolbar

<android.support.v7.widget.Toolbar
    android:theme="@style/AppTheme.Toolbar"
    ...
person Arbitur    schedule 24.07.2017

Если вы используете android.support.v7.widget.SearchView, это возможно без использования отражения.

Вот как я это делаю в своем приложении:

EditText text = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
ImageView searchCloseIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);

if (searchPlate != null) {
    searchPlate.setBackgroundResource(R.drawable.search_background);
}

if (text != null){
    text.setTextColor(resources.getColor(R.color.white));
    text.setHintTextColor(getResources().getColor(R.color.white));

    SpannableStringBuilder magHint = new SpannableStringBuilder("  ");
    magHint.append(resources.getString(R.string.search));

    Drawable searchIcon = getResources().getDrawable(R.drawable.ic_action_view_search);
    int textSize = (int) (text.getTextSize() * 1.5);
    searchIcon.setBounds(0, 0, textSize, textSize);
    magHint.setSpan(new ImageSpan(searchIcon), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    // Set the new hint text
    text.setHint(magHint);

}

if (searchCloseIcon != null){
    searchCloseIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_action_close));
}

Они не предоставляют публично идентификаторы для SearchView, отличного от appcompat, но они делают это для AppCompat, если вы знаете, где искать. :)

person LukeWaggoner    schedule 16.12.2014
comment
Это действительно хорошо работает на различных устройствах. Хороший. - person Shark; 18.01.2016

У меня была эта проблема, и это работает для меня.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.customer_menu, menu);
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView       = (SearchView) menu.findItem(R.id.menu_customer_search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        searchView.setOnQueryTextListener(this);

        //Applies white color on searchview text
        int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
        TextView textView = (TextView) searchView.findViewById(id);
        textView.setTextColor(Color.WHITE);

        return true;
}
person Alexandre    schedule 01.03.2013
comment
Я всегда получаю null на: (TextView) searchView.findViewById (id); - person danielrvt-sgb; 16.08.2013

Если вы основываете тему своего приложения на голографической теме, в SearchView вы получите белый текст вместо черного.

<style name="Theme.MyTheme" parent="android:Theme.Holo">

Я не нашел другого способа изменить цвет текста в searchview без использования грязных хаков.

person Tjeerd    schedule 17.10.2012
comment
Это не сработало. Я надеялся, что это так, поскольку это намного чище, чем ручной поиск идентификатора волшебного представления. Я пробовал несколько тем с действием, макет которого имеет темный фон, но ни одна из них не произвела ничего, кроме черного текста в SearchView. - person E-Riz; 11.11.2013

Самый чистый способ:

Панель инструментов использует тему ThemeOverlay.AppCompat.Dark.Actionbar.

Теперь сделайте его дочерним элементом:

toolbarStyle parent «ThemeOverlay.AppCompat.Dark.Actionbar»

добавить этот предмет в этом стиле

название элемента "android: editTextColor"> yourcolor

Выполнено.

Еще одна очень важная вещь: на панели инструментов поместите layout_height = "? Attr / actionbarSize". По умолчанию это wrap_content. Для меня текст даже не был виден в searchview, это решило эту проблему.

person Sharad    schedule 07.08.2017

Да, это возможно, используя следующий метод.

public static EditText setHintEditText(EditText argEditText, String argHintMessage, boolean argIsRequire) {
    try {
        if (argIsRequire) {
            argHintMessage = "   " + argHintMessage;
            //String text = "<font color=#8c8c8c>"+argHintMessage+"</font> <font color=#cc0029>*</font>";
            String text = "<font color=#8c8c8c>" + argHintMessage + "</font>";
            argEditText.setHint(Html.fromHtml(text));
        } else {
            argEditText.setHint(argHintMessage);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return argEditText;
}

Вызов этого метода выглядит так ..

metLoginUserName=(EditText)this.findViewById(R.id.etLoginUserName);
    metLoginPassword=(EditText)this.findViewById(R.id.etLoginPassword);

    /**Set the hint in username and password edittext*/
    metLoginUserName=HotSpotStaticMethod.setHintEditText(metLoginUserName, getString(R.string.hint_username),true);
    metLoginPassword=HotSpotStaticMethod.setHintEditText(metLoginPassword, getString(R.string.hint_password),true);

используя его, я успешно добавил красный цвет * метку в подсказку с помощью этого метода. Вы должны изменить этот метод в соответствии с вашими требованиями. Надеюсь, это поможет вам .... :)

person DynamicMind    schedule 31.12.2012
comment
для меня это немного сложно. - person gaols; 31.12.2012
comment
Текст строки = ‹цвет шрифта = # 8c8c8c› + HintMessage + ‹/font›; argEditText.setHint (Html.fromHtml (текст)); вы также можете использовать только эти две строки кода для установки цветовой подсказки - person DynamicMind; 31.12.2012
comment
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); это мое решение, но я думаю, что ваше решение лучше моего, я воспользуюсь вашим решением, спасибо. - person gaols; 31.12.2012
comment
@gaols у тебя есть решение ..? - person DynamicMind; 31.12.2012
comment
@ gaols, где ваш com.android.internal.R.id.search_src_text? - person wangqi060934; 24.05.2013
comment
@gaols отвечает за appcompat-v7. См. Abc_search_view.xml, внутри находится представление с классом android.support.v7.widget.SearchView $ SearchAutoComplete - person straya; 23.01.2015

Используйте это, это правильно. : D

AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(R.id.abs__search_src_text);
searchText.setHintTextColor(getResources().getColor(color.black));
searchText.setTextColor(getResources().getColor(color.black));
person sonida    schedule 28.01.2013

Да мы можем,

SearchView searchView = (SearchView) findViewById(R.id.sv_symbol);

Чтобы применить белый цвет к тексту SerachView,

int id = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) searchView.findViewById(id);
textView.setTextColor(Color.WHITE);

Удачного кодирования !!!!

person Srinivasan    schedule 10.04.2015

это работает для меня.

final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);

searchView.setOnQueryTextListener(this);   
searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(getResources().getColor(R.color.white));
searchEditText.setHintTextColor(getResources().getColor(R.color.white));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) 
{
    searchEditText.setBackgroundColor(getResources().getColor(R.color.c_trasnparent));
    searchEditText.setGravity(Gravity.CENTER);
    searchEditText.setCompoundDrawables(null,null,R.drawable.ic_cross,null);
}
person Krishna Mohan Singh    schedule 26.08.2016

Изменить цвет набранного текста:

((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setTextColor(Color.WHITE);

Изменить цвет текста подсказки:

((EditText)((SearchView)findViewById(R.id.searchView)).findViewById(((SearchView)findViewById(R.id.searchView)).getContext().getResources().getIdentifier("android:id/search_src_text", null, null))).setHintTextColor(Color.LTGRAY);
person Fabio Guerra    schedule 17.07.2013

Это работает для меня, если вы используете androidx.appcompat.widget.SearchView, примените androidx.appcompat.R.id.search_src_text для идентификации searchview, не возвращает null в < strong> textView

    TextView textView = (TextView) searchView.findViewById(androidx.appcompat.R.id.search_src_text);
    textView.setTextColor(Color.RED);
    textView.setHintTextColorstrong text(Color.RED);
person ELTeleco    schedule 08.09.2020

Объект SearchView простирается от LinearLayout, поэтому он содержит другие представления. Уловка состоит в том, чтобы найти представление, содержащее текст подсказки, и программно изменить цвет. Проблема с попыткой найти представление по идентификатору заключается в том, что идентификатор зависит от темы, используемой в приложении. Таким образом, в зависимости от используемой темы метод findViewById(int id) может возвращать null. Лучший подход, который работает с каждой темой, - это пройти по иерархии представлений и найти виджет, содержащий текст подсказки:

// get your SearchView with its id
SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
// traverse the view to the widget containing the hint text
LinearLayout ll = (LinearLayout)searchView.getChildAt(0);
LinearLayout ll2 = (LinearLayout)ll.getChildAt(2);
LinearLayout ll3 = (LinearLayout)ll2.getChildAt(1);
SearchView.SearchAutoComplete autoComplete = (SearchView.SearchAutoComplete)ll3.getChildAt(0);
// set the hint text color
autoComplete.setHintTextColor(getResources().getColor(Color.WHITE));
// set the text color
autoComplete.setTextColor(Color.BLUE);

Используя этот метод, вы также можете изменить внешний вид других виджетов в SearchView иерархии, например, EditText, содержащего поисковый запрос. Если Google не решит изменить иерархию представления SearchView в ближайшее время, вы сможете изменить внешний вид виджета с помощью этого метода в течение некоторого времени.

person jfcartier    schedule 11.03.2014

Можно настроить searchview с помощью библиотеки appcompat v7. Я использовал библиотеку appcompat v7 и определил для нее собственный стиль. В папку с возможностью переноса поместите файл bottom_border.xml, который выглядит так:

 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 <item>
  <shape >
      <solid android:color="@color/blue_color" />
  </shape>
 </item>
 <item android:bottom="0.8dp"
   android:left="0.8dp"
   android:right="0.8dp">
  <shape >
      <solid android:color="@color/background_color" />
  </shape>
 </item>

 <!-- draw another block to cut-off the left and right bars -->
 <item android:bottom="2.0dp">
  <shape >
      <solid android:color="@color/main_accent" />
  </shape>
  </item>
 </layer-list>

В папке значений styles_myactionbartheme.xml:

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
  <style name="AppnewTheme" parent="Theme.AppCompat.Light">
    <item name="android:windowBackground">@color/background</item>
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:actionBarWidgetTheme">@style/ActionBarWidget</item>
  </style> 
  <!-- Actionbar Theme -->
  <style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/main_accent</item>
    <!-- <item name="android:icon">@drawable/abc_ic_ab_back_holo_light</item> -->
  </style> 
  <style name="ActionBarWidget" parent="Theme.AppCompat.Light">
    <!-- SearchView customization-->
     <!-- Changing the small search icon when the view is expanded -->
    <!-- <item name="searchViewSearchIcon">@drawable/ic_action_search</item> -->
     <!-- Changing the cross icon to erase typed text -->
   <!--   <item name="searchViewCloseIcon">@drawable/ic_action_remove</item> -->
     <!-- Styling the background of the text field, i.e. blue bracket -->
    <item name="searchViewTextField">@drawable/bottom_border</item>
     <!-- Styling the text view that displays the typed text query -->
    <item name="searchViewAutoCompleteTextView">@style/AutoCompleteTextView</item>        
  </style>

    <style name="AutoCompleteTextView" parent="Widget.AppCompat.Light.AutoCompleteTextView">
     <item name="android:textColor">@color/text_color</item>
   <!--   <item name="android:textCursorDrawable">@null</item> -->
    <!-- <item name="android:textColorHighlight">@color/search_view_selected_text</item> -->
  </style>
 </resources>

Я определил файл custommenu.xml для отображения меню:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:com.example.actionbartheme="http://schemas.android.com/apk/res-auto" >  

  <item android:id="@+id/search"
      android:title="@string/search_title"
      android:icon="@drawable/search_buttonn"
      com.example.actionbartheme:showAsAction="ifRoom|collapseActionView"
        com.example.actionbartheme:actionViewClass="android.support.v7.widget.SearchView"/>        
  </menu>

Ваша активность должна расширять ActionBarActivity вместо Activity. Вот метод onCreateOptionsMenu.

  @Override
  public boolean onCreateOptionsMenu(Menu menu) 
  {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.custommenu, menu);
  }

В файле манифеста:

  <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppnewTheme" >

Для получения дополнительной информации см. Этот URL:
Здесь http://www.jayway.com/2014/06/02/android-theming-the-actionbar/

person Suhas Patil    schedule 22.09.2014

для панели инструментов appcompat-v7 с searchView (предоставляется через MenuItemCompat):

Установка темы панели инструментов на @ style / ThemeOverlay.AppCompat.Light даст темный цвет (черный) для текста подсказки и для введенного текста, но не повлияет на цвет курсора *. Соответственно, установка темы панели инструментов на @ style / ThemeOverlay.AppCompat.Dark даст светлый цвет (белый) для текста подсказки и введенного текста, курсор * в любом случае будет белым.

Настройка вышеуказанных тем:

android: textColorPrimary -> цвет введенного текста

editTextColor -> цвет введенного текста (переопределит влияние android: textColorPrimary, если установлено)

android: textColorHint -> цвет подсказки

* примечание: мне еще предстоит определить, как можно управлять цветом курсора (без использования решения для отражения).

person straya    schedule 23.01.2015
comment
Цвет курсора происходит от colorControlActivated - person Henry; 24.03.2016

Используя это, я смог изменить набранный цветной текст в режиме поиска.

AutoCompleteTextView typed_text = (AutoCompleteTextView) inputSearch.findViewById(inputSearch.getContext().getResources().getIdentifier("android:id/search_src_text", null, null));
typed_text.setTextColor(Color.WHITE);
person Dhriti    schedule 22.05.2016

Вот это да. Ответов много. Он получает значение цвета от вашего основного цвета.

Измените его, и готово!

@Override
public void onResume() {
    super.onResume();
    getActivity().setTheme(R.style.YourTheme_Searching);
}

Стили;

<style name="YourTheme.Searching" parent="YourTheme">
    <item name="android:textColorPrimary">@android:color/white</item>
</style>
person Mohamed    schedule 12.04.2017

изменить стиль searchView на панели инструментов с помощью androidx.

во-первых, установите стиль просмотра поиска в стиле панели инструментов (измените родительский элемент на свое собственное приложение):

     <!-- toolbar style -->
      <style name="ToolbarStyle" parent="Theme.AppCompat.Light.NoActionBar">     
          <!-- search view about -->
          <item name="android:editTextColor">@color/colorWhitePrimaryText</item>
          <item name="android:textColorHint">@color/colorWhiteSecondaryText</item>
          <item name="android:textCursorDrawable">@drawable/drawable_cursor_white</item>
          <item name="closeIcon">@mipmap/ic_close</item>
          <item name="searchHintIcon">@mipmap/ic_search_white</item>
          <item name="searchIcon">@mipmap/ic_search_white</item>
          <item name="android:longClickable">false</item>
          <item name="android:queryHint">@string/toolbar_search</item>
      </style> 

затем используйте его в макете панели инструментов:

android:theme="@style/ToolbarStyle"

с его помощью вы можете изменить большинство стилей searchView, кроме подсказки запроса.

наконец, установите подсказку запроса в параметрах меню панели инструментов:

toolbar.setOnMenuItemClickListener(item -> {
        switch (item.getItemId()){
            case R.id.toolbar_search:
                SearchView searchView = (SearchView) item.getActionView();
                searchView.setQueryHint("default query");
                searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                    @Override
                    public boolean onQueryTextSubmit(String query) {
                        return false;
                    }

                    @Override
                    public boolean onQueryTextChange(String newText) {
                        return false;
                    }
                });
                return true;
                default:
                    return false;
        }
person user2333    schedule 11.11.2019
comment
Вы хотели опубликовать что-то в стиле searchView? - person DavidW; 11.11.2019
comment
Я доделал и упростил свое решение, может быть, оно вам поможет. - person user2333; 15.11.2019

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

person Jimmy Ilenloa    schedule 01.03.2014

Я нашел решение из сообщения в блоге. См. здесь.

В основном вы создаете стиль searchViewAutoCompleteTextView, и android: actionBarWidgetTheme наследует стиль.

person leafartist    schedule 05.10.2014

это работает со мной

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem searchItem = menu.findItem(R.id.action_search);
    EditText searchEditText = (EditText) searchView.getActionView().findViewById(android.support.v7.appcompat.R.id.search_src_text);
    searchEditText.setTextColor(getResources().getColor(R.color.white));
    searchEditText.setHintTextColor(getResources().getColor(R.color.white));
    return super.onPrepareOptionsMenu(menu);
}
person Hamza Awwad    schedule 19.04.2016

Что сработало для меня

((EditText)searchView.findViewById(R.id.search_src_text)).setTextColor(getResources().getColor(R.color.text));
person Suneet Srivastava    schedule 02.08.2018

Для языка Котлин

    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)
person Ali Al Fayed    schedule 05.05.2020

Вы можете реализовать, как этот класс, для изменения цвета шрифта и изображения:

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

person sonida    schedule 03.10.2013

Я попытался найти одно решение для этого. Думаю, вам это поможет ..

searchView.setBackgroundColor(Color.WHITE);

введите описание изображения здесь

person Balaji    schedule 15.08.2012
comment
в вопросе говорится, что цвет текста, а не цвет фона - person Guillaume; 02.08.2013

Сюда :)

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 ;
}
person Qais    schedule 10.03.2018
comment
Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, почему и / или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. - person rollstuhlfahrer; 10.03.2018
comment
спасибо за помощь. - person Qais; 12.03.2018

Преобразование SearchView в TextView позволяет использовать методы TextView для изменения его цвета:

((TextView) searchView).setTextColor(Color.WHITE);
((TextView) searchView).setHintTextColor(Color.WHITE);
person Juan José Melero Gómez    schedule 07.07.2015