2015-08-24 31 views
5

Tworzę widok wyszukiwania na pasku narzędzi przy użyciu onCreateOptionsMenu, ale nie mogę uzyskać wyraźnego przycisku X, aby początkowo był biały. Po rozpoczęciu pisania liter staje się biały. Po usunięciu pozostaje również biały.Ustaw Wyszukaj przezroczysty przycisk koloru

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

rozwiązać ten jest tutaj: https://stackoverflow.com/ pytania/31093594/search-view-close-icon-pojawiające się-wyłączone-raczej-niż-białe/46450639 # 46450639 –

Odpowiedz

15

Znaleziono rozwiązanie. Jednak interesują się lepszymi.

pobrałem „jasny przycisk” obraz z https://www.google.com/design/icons/#ic_clear w 24pt biały i dodaje ten kod do końca 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

Gdy jesteś w stanie uzyskać rzeczywiste 'ImageView', nie możesz po prostu użyć' setColorFilter() ' na tym, zamiast używać "niestandardowego" losowania? – Boris

+0

Patrząc na moje pytanie wydaje się, że tak właśnie próbowałem bez powodzenia. Nie wiem, dlaczego to nie zadziałało. – Sunkas

+0

Twój kod działa dla mnie, o ile widzę. Nie wiem, dlaczego to nie działa. – Boris

0

można wykorzystywać własne niestandardowe ikony zamiast domyślnie searchview anulować ikonę.

Użyłem poniżej kod, który działa dobrze, Mam nadzieję, że będzie działać dla Ciebie.

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

To zadziała nad poziomem api 14.

+0

Dzięki za alternatywne rozwiązanie. Jednak użycie 'findViewById' wydaje się krótsze i bezpieczniejsze (brak stałych odwołań do ciągów). – Sunkas

0

Można również ustawić go z XML. Korzystam z biblioteki pomocy technicznej 24.2.1 i działania z motywem, którego rodzicem jest "Theme.AppCompat.Light" i Android.support.v7.widget.SearchView w ActionBar.

Można ustawić actionBarWidgetTheme w swojej działalności tematu tak:

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

a następnie zdefiniować MyActionBarWidgetTheme i ustawić kolory chcesz tam:

<style name="MyActionBarWidgetTheme"> 
    <item name="android:textColorSecondary">@android:color/white</item> 
</style> 
  • android: textColorSecondary dotyczy ikona zamknięcia

  • android: textColorPr imary odnosi się do tekstu, który wchodzi

  • colorControlActivated dotyczy kursora

  • android: textColorHint odnosi się do tekstu podpowiedź