Удалите SearchIcon в качестве подсказки в searchView

Я делаю приложение, например, когда я нажимаю на изображение (это searchView)

Введите описание изображения здесь

Откроется панель поиска!

И похоже Введите описание изображения здесь

Но здесь отображается значок поиска по умолчанию (лупа), но это исчезает, как только вводится какой-либо текст

Введите описание изображения здесь

Но я не хочу, чтобы лупа отображалась даже в первый клик

И здесь я не использую ни один xml-файл

Мой код

public class MainActivity extends Activity { @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout relative = new RelativeLayout(this); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); relative.setLayoutParams(params); setContentView(relative); SearchView searchView = new SearchView(this); traverseView(searchView, 0); // searchView.setIconifiedByDefault(false); LayoutParams searchViewparams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); // searchViewparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); searchView.setLayoutParams(searchViewparams); relative.addView(searchView); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi") private void traverseView(View view, int index) { if (view instanceof SearchView) { SearchView v = (SearchView) view; for(int i = 0; i < v.getChildCount(); i++) { traverseView(v.getChildAt(i), i); } } else if (view instanceof LinearLayout) { LinearLayout ll = (LinearLayout) view; for(int i = 0; i < ll.getChildCount(); i++) { traverseView(ll.getChildAt(i), i); } } else if (view instanceof EditText) { ((EditText) view).setTextColor(Color.GREEN); ((EditText) view).setHintTextColor(Color.BLACK); } else if (view instanceof TextView) { ((TextView) view).setTextColor(Color.BLUE); } else if (view instanceof ImageView) { ((ImageView) view).setImageResource(R.drawable.ic_launcher); } else { Log.v("View Scout", "Undefined view type here..."); } } } 

Solutions Collecting From Web of "Удалите SearchIcon в качестве подсказки в searchView"

У меня тоже были проблемы с этим. Я объединил учебник, который я нашел, и существующий ответ, найденный здесь в stackoverflow.

 int magId = getResources().getIdentifier("android:id/search_mag_icon", null, null); ImageView magImage = (ImageView) searchView.findViewById(magId); magImage.setLayoutParams(new LinearLayout.LayoutParams(0, 0)); 

Обратите внимание, что searchView – это LinearLayout, поэтому используйте LinearLayout.LayoutParams, чтобы избежать исключения.

Я также пробовал это, но это не снимает вид. Кажется, я не могу понять, почему:

 magImage.setVisibility(View.GONE); 

Для других представлений, которые необходимо изменить, обратитесь к этому руководству.

Я просто поместил @null в атрибут searchHintIcon :

 <style name="SearchViewMy" parent="Widget.AppCompat.Light.SearchView"> <item name="searchHintIcon">@null</item> </style> 

И применил этот стиль в моей теме приложения

 <style name="Theme.App" parent="Theme.AppCompat.Light.NoActionBar.FullScreen"> <item name="searchViewStyle">@style/SearchViewMy</item> </style> 

Работает на меня.

В моем приложении я использовал android.support.v7.widget.SearchView и скрыть значок поиска, это сработало для меня:

 <android.support.v7.widget.SearchView ... app:iconifiedByDefault="false" app:searchIcon="@null" /> 

Я просто встретил ту же проблему, вот некоторые ссылки ссылки.

http://blog.luxteam.net/2013/11/04/styling-appcompat-searchview/

https://android.googlesource.com/platform/frameworks/support.git/+/android-support-lib-19.1.0/v7/appcompat/src/android/support/v7/widget/SearchView.java

Ключ находится в следующей функции, он устанавливает значок как ImageSpan .

 private CharSequence getDecoratedHint(CharSequence hintText) { // If the field is always expanded, then don't add the search icon to the hint if (!mIconifiedByDefault) return hintText; SpannableStringBuilder ssb = new SpannableStringBuilder(" "); // for the icon ssb.append(hintText); Drawable searchIcon = getContext().getResources().getDrawable(getSearchIconId()); int textSize = (int) (mQueryTextView.getTextSize() * 1.25); searchIcon.setBounds(0, 0, textSize, textSize); ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return ssb; } 

Попробуйте эти три строки:

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

* Он работает только для android.widget.SearchView

TL; DR: просто установить подсказку EditText на пустую строку достаточно, чтобы удалить значок подсказки.

Я нашел ответ, который действительно работает. Есть много вещей об изменении значка с использованием отражения – например, обсуждалось в Styling ActionBar SearchView . Этот сайт – отличный ресурс, но, к сожалению, подсказка поиска ImageView не меняется (хотя отражение не вызывает ошибок). Единственным способом, которым я смог удалить этот образ, было следующее:

 try { int searchPlateId = searchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); EditText searchPlate = (EditText) searchView.findViewById(searchPlateId); searchPlate.setHint(""); } catch (Throwable t) { t.printStackTrace(); } 

Вы должны поместить это в свой метод onCreateOptionsMenu и получить ссылку на свой XML указатель SearchView используя что-то вроде:

 SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 

Используйте атрибут searchHintIcon в своих стилях для этого:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="searchViewStyle">@style/AppTheme.SearchView</item> </style> <style name="AppTheme.SearchView" parent="Widget.AppCompat.SearchView"> <item name="searchHintIcon">@null</item> </style> 

Вы можете заменить @null на любые выталкиваемые разрешения, которые вы хотите

Вы можете попробовать следующее:

  public class MainActivity extends Activity { @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); RelativeLayout relative = new RelativeLayout(this); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT); relative.setLayoutParams(params); setContentView(relative); SearchView searchView = new SearchView(this); searchView.setIconifiedByDefault(false); traverseView(searchView, 0); // searchView.setIconifiedByDefault(false); LayoutParams searchViewparams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); // searchViewparams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); searchView.setLayoutParams(searchViewparams); relative.addView(searchView); } @TargetApi(Build.VERSION_CODES.HONEYCOMB) @SuppressLint("NewApi") private void traverseView(View view, int index) { if (view instanceof SearchView) { SearchView v = (SearchView) view; for(int i = 0; i < v.getChildCount(); i++) { traverseView(v.getChildAt(i), i); } } else if (view instanceof LinearLayout) { LinearLayout ll = (LinearLayout) view; for(int i = 0; i < ll.getChildCount(); i++) { traverseView(ll.getChildAt(i), i); } } else if (view instanceof EditText) { ((EditText) view).setTextColor(Color.GREEN); ((EditText) view).setHintTextColor(Color.BLACK); } else if (view instanceof TextView) { ((TextView) view).setTextColor(Color.BLUE); } else if (view instanceof ImageView) { ((ImageView) view).setImageResource(R.drawable.ic_launcher); } else { Log.v("View Scout", "Undefined view type here..."); } } }