Intereting Posts
OnLocationChanged не вызывается на некоторых устройствах Изменить название проекта android Предотвратить использование Google для автоматического перевода описания моего приложения Широковещательный приемник для обнаружения запуска приложения Как осуществлять программный контроль громкости системы Android В чем разница между Activity.runOnUiThread (runnable action) и Handler.post ()? Как я могу получить позицию элемента в списке, когда я нажимаю на конкретное представление? Андроид AudioRecord амплитудное чтение от MIC Как настроить пользовательский просмотр обновления в SwipeRefreshLayout? Android Webview – веб-страница должна соответствовать экрану устройства Facebook и Twitter в прямом эфире в приложениях для Android Как подсчитывается ограничение скорости Firebase Remote Config? Facebook shareDialog ничего не показывает Android-переключатель widget textOn и textOff не работают в Lollipop Оператор switch с аргументом string в качестве аргумента в Android

Удалите 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..."); } } } 

У меня тоже были проблемы с этим. Я объединил учебник, который я нашел, и существующий ответ, найденный здесь в 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..."); } } }