Ist es möglich, die Textfarbe in einer Android SearchView zu ändern?


115

Das SearchView-Element verfügt über keine Eigenschaften zum Ändern der Textfarbe. Die Standardtextfarbe ist Schwarz und funktioniert nicht auf unserem dunklen Hintergrund. Gibt es eine Möglichkeit, die Farbe des Textes zu ändern, ohne auf Hacks zurückzugreifen?

Ich habe diese ähnliche Frage im Zusammenhang mit der Änderung der Textgröße gefunden, aber bisher gibt es keine Antworten: Wie stelle ich SearchView TextSize ein?


1
Ich würde eine Antwort darauf lieben.
TheLettuceMaster

Bitte erwähnen Sie, was Sie versucht haben.
Sahil Mahajan Mj

Antworten:


121

Hinzufügen

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

zum übergeordneten Thema und das sollte den eingegebenen Text ändern. Sie können auch verwenden

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

um den Hinweistext für die Suchansicht zu ändern. (Beachten Sie, dass Sie das durch den @android:color/whiteentsprechenden Wert ersetzen können, den Sie verwenden möchten.)


1
Dies reparierte es für mich und beinhaltete keine komplizierten Spielereien mit Reflexion. Funktioniert auch mit Appcompat.
DJ_Bushido

Sie können android: theme in der Suchansicht auch auf einen Stil festlegen, der das android: editTextColor-Element enthält. Auf diese Weise wirken Sie sich nur auf diese Suchansicht aus.
Pepijn

2
Es klappt! Ich habe eine Suchansicht in einer Symbolleiste verwendet, ThemeOverlay.AppCompat.Light erweitert und das obige Element hinzugefügt und den Stil im Symbolleisten-Widget festgelegt;) Funktioniert wie ein Zauber ...
Codename_47

Diese Lösung funktioniert bei mir nicht. Text hat immer noch die falsche Farbe. Die Antwort unten mit dem programmgesteuerten Einstellen der Hinweisfarbe hat bei mir funktioniert.
Dominik

4
Das Problem bei dieser Antwort ist, dass dadurch auch die Textfarbe Ihres EditTexts geändert wird . Die einzige Lösung, die für mich funktioniert hat und die nur die Textfarbe ändert, SearchViewist hier: stackoverflow.com/a/40550067/1617737
Ban-Geoengineering

95

Versuchen Sie Folgendes: Sie erhalten ein Handle für die Textansicht vom SDK und ändern sie dann, da sie nicht öffentlich verfügbar gemacht werden.

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

Ich mag elegante Lösungen
Mohsen Afshin

29
Dies gibt immer null zurück
danielrvt-sgb

Beachten Sie, dass bei Verwendung von ActionBarSherlock die Ansichts-IDs unterschiedlich sind. Beispielsweise setzt die Bibliothek derzeit die Bearbeitungstext-ID auf "package: id / abs__search_src_text", auf die direkt über R.id.abs__search_src_text zugegriffen werden kann.
Greg7gkb

3
Außerdem wollte ich eigentlich die Textfarbe des SearchView-Hinweises ändern, was einfach über textView.setHintTextColor () möglich ist.
Greg7gkb

3
Dies ist ein sehr schmutziger Hack. Verwenden Sie stattdessen android: editTextColor und android: textColorHint, wie von akdotcom vorgeschlagen
Philipp Hofmann

69

Das funktioniert bei mir.

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

1
Dies funktioniert auch, wenn Sie die Ansicht als Textansicht oder sogar als AutoCompleteTextView erhalten.
Juan José Melero Gómez

Ja, dies ist Arbeit für mich, nachdem ich dem Vorschlag von @ JuanJoséMeleroGómez
Parth Patel

Ich nehme an, dies wurde aus meiner Antwort hier kopiert und gekürzt: stackoverflow.com/a/26251197/2914140 .
CoolMind

24

Ich wollte etwas Ähnliches machen. Ich musste endlich das TextViewunter den SearchViewKindern finden:

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

Wenn Sie die util-Methode möchten:

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

3
Auch ich habe mit früheren Lösungen die Null-Ausnahme erhalten, und das hat bei mir funktioniert!
Diego Ponciano

1
Dies sollte als akzeptierte Antwort markiert werden. Das obige gibt null. Vielen Dank für die gute Arbeit Kumpel :)
Blueware

3
Diese Lösung ist so ekelhaft, aber es ist die einzige, die tatsächlich funktioniert, und das Android-Team ist schuld!
Ofek Ron

Wie würden wir damit auf das Suchsymbol zugreifen?
Yasin Yaqoobi

17

Dank @CzarMatt habe ich AndroidX- Unterstützung hinzugefügt .

Für mich funktioniert folgendes. Ich habe einen Code aus einem Link verwendet: Ändern Sie die Textfarbe des Suchhinweises in der Aktionsleiste mithilfe der Unterstützungsbibliothek .

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

Das Ändern der Suchtext-Hinweisfarbe in der Aktionsleiste empfiehlt eine andere Lösung. Es funktioniert, setzt aber nur Hinweistext und Farbe.

    searchView.setQueryHint(Html.fromHtml("<font color = #ffffff>" + getResources().getString(R.string.search_hint) + "</font>"));

1
Verwenden androidx.appcompat.R.id.search_src_textSie diese Option, wenn Sie Ihr Projekt auf AndroidX migriert haben.
CzarMatt

16

Dies wird am besten durch benutzerdefinierte Stile erreicht. Überladen Sie den Widget-Stil der Aktionsleiste mit Ihrem eigenen benutzerdefinierten Stil. Für Holo Licht mit dunklen Aktionsleiste, setzte diese in Ihrem eigenen Stil Datei wie 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>

Stellen Sie sicher, dass Ihre Anwendung ein benutzerdefiniertes Thema verwendet, wie unter Geben Sie hier die Linkbeschreibung ein


14

Sie können dies tun, indem Sie das editTextColorAttribut im Stil festlegen.

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

und Sie wenden diesen Stil auf Toolbaroder SearchViewim Layout an.

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

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

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

+1 Dies übertrifft alle Lösungen mit findViewById imho. Das Ansichtsstil sollte nach Möglichkeit verwendet werden.
Mattias

Dies sollte die akzeptierte Antwort sein! Sehr sauber und einfach.
MSeiz5

8

wenn Sie verwenden - 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);

in Kotlin

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

Sie sollten jetzt lieber Androidx-Unterstützungsbibliotheken verwenden


7

Erstellen Sie einen Stil für Ihre Toolbar

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

Und setzen Sie es als Thema für die Toolbar

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

6

Wenn Sie android.support.v7.widget.SearchView verwenden, ist dies ohne Reflection möglich.

So mache ich das in meiner App:

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

Sie machen die IDs für die nicht appcompat SearchView nicht öffentlich verfügbar, aber für AppCompat, wenn Sie wissen, wo Sie suchen müssen. :) :)


Dies funktioniert tatsächlich ziemlich gut auf verschiedenen Geräten. Schön.
Hai

5

Ich hatte dieses Problem und das funktioniert bei mir.

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

4
Ich bekomme immer null bei: (TextView) searchView.findViewById (id);
danielrvt-sgb

4

Wenn Sie Ihr App-Thema auf das Holo-Thema stützen, erhalten Sie in Ihrer Suchansicht einen weißen statt eines schwarzen Textes

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

Ich habe keine andere Möglichkeit gefunden, die Textfarbe der Suchansicht zu ändern, ohne schmutzige Hacks zu verwenden.


1
Das hat nicht funktioniert. Ich hatte gehofft, dass dies der Fall sein würde, da es viel sauberer ist als die manuelle Suche nach einer "magischen" Ansichts-ID. Ich habe mehrere Themen mit einer Aktivität ausprobiert, deren Layout einen dunklen Hintergrund hat, aber keines davon hat etwas anderes als schwarzen Text in der Suchansicht erzeugt.
E-Riz

4

Der sauberste Weg ist:

Die Symbolleiste verwendet das Thema ThemeOverlay.AppCompat.Dark.Actionbar.

Machen Sie jetzt ein Kind daraus wie:

toolbarStyle parent "ThemeOverlay.AppCompat.Dark.Actionbar"

Fügen Sie diesen Artikel in diesem Stil hinzu

Artikelname "android: editTextColor"> yourcolor

Getan.

Eine weitere sehr wichtige Sache ist, in die Symbolleiste das layout_height = "? Attr / actionbarSize" zu setzen. Standardmäßig ist es wrap_content. Für mich war Text in der Suchansicht nicht einmal sichtbar, das Problem wurde behoben.


4

Ja, es ist mit der folgenden Methode möglich.

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

Der Aufruf dieser Methode sieht folgendermaßen aus.

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

mit dieser Methode habe ich erfolgreich rote Farbe * Markierung in Hinweis mit dieser Methode hinzugefügt. Sie sollten diese Methode entsprechend Ihren Anforderungen ändern. Ich hoffe es ist hilfreich für dich .... :)


es ist etwas kompliziert für mich.
Gefängnisse

1
String text = "<font color = # 8c8c8c>" + HintMessage + "</ font>"; argEditText.setHint (Html.fromHtml (Text)); Sie können auch nur diesen zweizeiligen Code zum Einstellen des
Farbtipps verwenden

1
SearchAutoComplete autoCompleteView = (SearchAutoComplete) mSearchView .findViewById(com.android.internal.R.id.search_src_text);autoCompleteView.setHintTextColor(R.color.hint_text_color); Das ist meine Lösung, aber ich denke, deine ist besser als meine. Ich werde deine Lösung verwenden, danke.
Gaols

@gaols hast du lösung ..?
DynamicMind

@ gaols, wo ist dein "com.android.internal.R.id.search_src_text"?
Wangqi060934

3

Verwenden Sie dieses, es ist richtig. : D.

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

3

Ja wir können,

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

Um die weiße Farbe für den SerachView-Text anzuwenden,

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

Viel Spaß beim Codieren !!!!


3

das funktioniert bei mir.

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

3

Ändern Sie die Farbe des eingegebenen Textes:

((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);

Ändern Sie die Farbe des Hinweistextes:

((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);

2
TextView textView = (TextView) searchView.findViewById(R.id.search_src_text);
textView.setTextColor(Color.BLACK);

1

Ein SearchViewObjekt erstreckt sich von LinearLayout, sodass es andere Ansichten enthält. Der Trick besteht darin, die Ansicht mit dem Hinweistext zu finden und die Farbe programmgesteuert zu ändern. Das Problem beim Versuch, die Ansicht anhand der ID zu finden, besteht darin, dass die ID von dem in der Anwendung verwendeten Thema abhängt. Abhängig vom verwendeten Thema wird die findViewById(int id)Methode möglicherweise zurückgegeben null. Ein besserer Ansatz, der mit jedem Thema funktioniert, besteht darin, die Ansichtshierarchie zu durchlaufen und das Widget zu finden, das den Hinweistext enthält:

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

Mit dieser Methode können Sie auch das Aussehen anderer Widgets in der SearchViewHierarchie ändern , z. B. das EditTextHalten der Suchabfrage. Sofern Google nicht beschließt, die Ansichtshierarchie eines SearchViewWidgets in Kürze zu ändern, sollten Sie in der Lage sein, das Erscheinungsbild des Widgets mit dieser Methode für einige Zeit zu ändern.


1

Es ist möglich, die Suchansicht mithilfe der Bibliothek appcompat v7 anzupassen. Ich habe die Bibliothek appcompat v7 verwendet und einen benutzerdefinierten Stil dafür definiert. Legen Sie in einem zeichnbaren Ordner die Datei bottom_border.xml ab, die folgendermaßen aussieht:

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

Im Werteordner 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>

Ich habe die Datei custommenu.xml für die Anzeige des Menüs definiert:

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

Ihre Aktivität sollte ActionBarActivity anstelle von Activity erweitern. Hier ist die onCreateOptionsMenu-Methode.

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

In der Manifestdatei:

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

Weitere Informationen finden Sie in dieser URL:
Hier http://www.jayway.com/2014/06/02/android-theming-the-actionbar/


1

für die Appcompat-v7-Symbolleiste mit searchView (bereitgestellt über MenuItemCompat):

Wenn Sie das Symbolleisten-Design auf @ style / ThemeOverlay.AppCompat.Light setzen, wird für den Hinweistext und den eingegebenen Text eine dunkle Farbe (schwarz) angezeigt, die Farbe des Cursors * wird jedoch nicht beeinflusst. Wenn Sie das Design der Symbolleiste auf @ style / ThemeOverlay.AppCompat.Dark setzen, erhalten Sie eine helle Farbe (weiß) für den Hinweistext und den eingegebenen Text. Der Cursor * ist ohnehin weiß.

Anpassen der oben genannten Themen:

android: textColorPrimary -> Farbe des eingegebenen Textes

editTextColor -> Farbe des eingegebenen Textes (überschreibt den Effekt von Android: textColorPrimary, falls festgelegt)

android: textColorHint -> Farbe des Hinweises

* Hinweis: Ich muss noch bestimmen, wie die Cursorfarbe gesteuert werden kann (ohne die Reflexionslösung zu verwenden).


Die Cursorfarbe kommt von colorControlActivated
Henry

1

Auf diese Weise konnte ich den eingegebenen Farbtext in der Suchansicht ändern

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

1

Beeindruckend. Viel Antwort. Es erhält den Farbwert von Ihrer Primärfarbe.

Ändern Sie es und es ist geschafft!

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

Stile;

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

1

Ändern Sie den SearchView-Stil in der Symbolleiste mit AndroidX.

Legen Sie zunächst den Stil der Suchansicht in Ihrer Symbolleiste fest (ändern Sie die übergeordneten Elemente mit Ihrer eigenen App-Basis):

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

Verwenden Sie es dann in Ihrem Symbolleistenlayout:

android:theme="@style/ToolbarStyle"

Mit dieser Option können Sie die meisten Suchansichten mit Ausnahme von Abfragehinweisen ändern.

Legen Sie schließlich den Abfragehinweis für die Optionen Ihres Symbolleistenmenüs fest:

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

Wollten Sie etwas unter "searchView style" posten?
DavidW

Ich habe meine Lösung fertiggestellt und vereinfacht, vielleicht kann sie Ihnen helfen.
user2333

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

Ich benutze Holoeverywhere Library. Beachten Sie den org.holoeverywhere.R.id.search_src_text


0

Ich habe eine Lösung aus einem Blogbeitrag gefunden. Siehe hier .

Grundsätzlich formatieren Sie searchViewAutoCompleteTextView und haben android: actionBarWidgetTheme erben den Stil.


0

es funktioniert bei mir

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

0

Was hat bei mir funktioniert?

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

0

Für die Kotlin-Sprache

    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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.