2015-08-24 22 views
5

Я создаю поиск на панели инструментов с помощью onCreateOptionsMenu, но не могу получить ясную кнопку X, чтобы изначально был белым. Он становится белым, когда начинает печатать буквы. Он также остается белым после очистки.Установить цвет кнопки поиска SearchView

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

Это решить здесь: https://stackoverflow.com/ Вопросы/31093594/search-view-close-icon-seeming-disabled-rather-than-white/46450639 # 46450639 –

ответ

15

Найдено решение. Тем не менее, они заинтересованы в лучших.

Загрузил «ясно кнопку» изображение из https://www.google.com/design/icons/#ic_clear в 24pt белых и добавил этот код в конец 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

Когда вы сможете получить фактический 'ImageView', не могли бы вы просто использовать' setColorFilter() ' на этом, вместо того, чтобы использовать «настраиваемый» вариант? – Boris

+0

Глядя на мой вопрос, кажется, так было, как я пробовал без успеха. Не знаю, почему это не сработало. – Sunkas

+0

Ваш код работает для меня, насколько я могу судить. Не знаю, почему это не работает для вас. – Boris

0

Вы можете использовать свой собственный значок вместо SearchView по умолчанию значка отмены.

Я использовал ниже код, который хорошо работает, надеюсь, что сработает для вас.

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

Это будет работать над уровнем апи 14.

+0

Спасибо за альтернативное решение. Однако использование 'findViewById' кажется более коротким и безопасным (без hardcoded string-referense). – Sunkas

0

Вы также можете установить его из XML. Я использую библиотеку поддержки 24.2.1 и активность с темой, родителькой которой является «Theme.AppCompat.Light» и андроид.support.v7.widget.SearchView в ActionBar.

Вы можете установить actionBarWidgetTheme в вашей теме деятельности, как это:

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

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

<style name="MyActionBarWidgetTheme"> 
    <item name="android:textColorSecondary">@android:color/white</item> 
</style> 
  • андроида: textColorSecondary относится к значок закрытия

  • android: textColorPr imary относится к тексту вы вводите

  • colorControlActivated относится к курсору

  • андроида: textColorHint относится к подсказке тексту

Смежные вопросы