2

screenshotКак удалить или изменить значок поиска в панели действий SearchView?

Как удалить или изменить значок поиска в редакторе edittext? Я использую библиотеку Appcompat.

Я использовал следующий код, чтобы изменить и удалить, но это не работает:

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    View search_mag_icon = (View)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 
     search_mag_icon.setBackgroundResource(R.drawable.ic_stub); 
     //search_mag_icon.setVisibility(View.GONE); 

ответ

3

Пер с AppCompat v21 blog post, вы можете предоставить собственный стиль для вашего SearchView, перекрывая вещи, такие как значок поиска:

<style name="Theme.MyTheme" parent="Theme.AppCompat"> 
    <item name="searchViewStyle">@style/MySearchViewStyle</item> 
</style> 
<style name="MySearchViewStyle" parent="Widget.AppCompat.SearchView"> 
    <!-- Search button icon --> 
    <item name="searchIcon">@drawable/custom_search_icon</item> 
</style> 
+0

Он хочет полностью удалить этот значок из подсказки, а не заменять его. – Solace

+1

@Solace - заменить его на ничего == удаляя его – ianhanniballake

+0

Я попробовал '', что дает мне 'String типы недопустимы (в 'searchIcon' со значением ''). оцените, если вы можете мне немного поучаствовать? Вы сами это пробовали? – Solace

1

Вы можете использовать ниже строк кода:

int searchMagIcon = getResources().getIdentifier("search_mag_icon", "id", "android"); 
ImageView SearchHintIcon = (ImageView) searchView.findViewById(searchMagIcon); 

Это сохранит ImageView, а затем вы сможете его изменить.

+0

не работает, получите NPE –

13

Наконец-то нашли решение. Попробуйте следующее:

try { 
    Field mDrawable = SearchView.class.getDeclaredField("mSearchHintIcon"); 
    mDrawable.setAccessible(true); 
    Drawable drawable = (Drawable)mDrawable.get(your search view here); 
    drawable.setAlpha(0); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+1

удалил мой ответ и отредактировал своего собеседника. :) –

+0

Пробовав все, это было единственное решение, работающее для меня, спасибо – Chol

+0

Работали как шарм! Благодарю. – Umarov

0

удалить это право вытяжки, что вы упомянули в XML:

final Drawable remove = ContextCompat.getDrawable(getActivity(), R.drawable.ic_close_circle); 
     etSearchProducts.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent event) { 
       if (etSearchProducts.getCompoundDrawables()[2] == null) { 
        return false; 
       } 
       if (event.getAction() != MotionEvent.ACTION_UP) { 
        return false; 
       } 
       if (event.getX() > etSearchProducts.getWidth() - etSearchProducts.getPaddingRight() - remove.getIntrinsicWidth()) { 
        etSearchProducts.setText(""); 
        Utility.hideKeyboard(getActivity()); 
       } 

       return false; 
      } 
     }); 
0

Я использовал пункт меню с помощью свойства app:actionViewClass="android.support.v7.widget.SearchView"

О деятельности я поставил:

searchView = (SearchView) searchMenuItem.getActionView(); 
searchView.setIconifiedByDefault(false); 

Чтобы удалить значок я сделал:

ImageView searchIcon = (ImageView)searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); 
searchIcon.setImageDrawable(null); 
0

Простейшее путь

  1. В случае, если вы используете AppCompat использование

    app:iconifiedByDefault="false" 
        app:searchIcon="@null" 
    
  2. Else использовать android вместо app в коде выше, как

    android:iconifiedByDefault="false" 
    android:searchIcon="@null"