2015-08-24 4 views
5

Ich erstelle eine Suchansicht in der Symbolleiste mit onCreateOptionsMenu, aber kann nicht die klare X Schaltfläche zunächst weiß sein. Beim Schreiben von Buchstaben wird es weiß. Es bleibt auch nach dem Löschen weiß.Setzen Sie SearchView deaktivieren Schaltfläche Farbe

Example of clear button having the color of gray instead of white

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.responsible_menu, menu); 
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); //TODO: May not be needed? 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
    { 
     @Override 
     public boolean onQueryTextSubmit(String query) 
     { 
      mAdapter.updateUIWithFilter(query); 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) 
     { 
      mAdapter.updateUIWithFilter(newText); 
      return false; 
     } 
    }); 

    // Does not work! Still not white. 
    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); 
    searchClose.setColorFilter(Color.argb(255, 255, 255, 255)); 

    searchClose.setAlpha(255); 

    return true; 
} 

responsible_menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:appcompat="http://schemas.android.com/apk/res-auto" 
     xmlns:app="http://schemas.android.com/tools"> 

    <item 
     android:id="@+id/menu_search" 
     android:title="@string/search" 
     appcompat:actionViewClass="android.support.v7.widget.SearchView" 
     appcompat:showAsAction="always"/> 

</menu> 
+0

Dies ist hier lösen: https://stackoverflow.com/ Fragen/31093594/search-view-close-icon-erscheint-deaktiviert-eher-als-weiß/46450639 # 46450639 –

Antwort

15

eine Lösung gefunden. Allerdings interessiert an besseren.

das „Löschtaste“ Bild von https://www.google.com/design/icons/#ic_clear in 24pt wissen heruntergeladen und hinzugefügt diesen Code bis zum Ende der onCreateOptionsMenu

// Does help! 
    ImageView searchClose = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_close_btn); 
    searchClose.setImageResource(R.drawable.ic_clear_white_24dp); 
+0

Wenn Sie in der Lage sind, die eigentliche 'ImageView' zu bekommen, können Sie nicht' setColorFilter() 'verwenden anstatt dass ein "benutzerdefiniertes" Zeichen verwendet wird? – Boris

+0

Wenn ich meine Frage anschaue, scheint es so zu sein, wie ich es ohne Erfolg versucht habe. Ich weiß nicht, warum es nicht funktioniert hat. – Sunkas

+0

Ihr Code funktioniert für mich, soweit ich sehen kann. Ich weiß nicht, warum es nicht für dich funktioniert. – Boris

0

Sie Ihr eigenes Symbol anstelle von Suchestandardsymbol aufheben können.

Ich habe unten Code verwendet, der gut funktioniert, hoffe, dass das für Sie arbeiten wird.

private void setCloseSearchIcon(SearchView searchView) { 
     try { 
      Field searchField = SearchView.class.getDeclaredField("mCloseButton"); 
      searchField.setAccessible(true); 
      ImageView closeBtn = (ImageView) searchField.get(searchView); 
      closeBtn.setImageResource(R.drawable.ic_close); 

     } catch (NoSuchFieldException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 

Dies wird über api Ebene arbeiten 14.

+0

Danke für alternative Lösung. Die Verwendung von 'findViewById' scheint jedoch kürzer und sicherer zu sein (keine hardcoded string-referense). – Sunkas

0

Sie können auch von XML gesetzt. Ich benutze die Support-Bibliothek 24.2.1 und eine Aktivität mit einem Thema, dessen Eltern "Theme.AppCompat.Light" ist und eine android.support.v7.widget.SearchView in der ActionBar.

Sie können eine actionBarWidgetTheme in Ihrer Tätigkeit Thema wie folgt festgelegt:

<style name="ActivityTheme" parent="Theme.AppCompat.Light"> 
    <item name="actionBarWidgetTheme">@style/MyActionBarWidgetTheme</item> 
</style> 

Und dann MyActionBarWidgetTheme definieren und legen Sie die Farben, die Sie dort wollen:

<style name="MyActionBarWidgetTheme"> 
    <item name="android:textColorSecondary">@android:color/white</item> 
</style> 
  • android: textColorSecondary gilt für das Symbol schließen

  • android: textColorPr imary gilt für den Text, den Sie

  • colorControlActivated eingeben gilt für den Cursor

  • android: textColorHint auf den Texthinweis gilt