tutorial studio example ejemplo bar android android-image searchview

studio - searchview android ejemplo



Elimine el SearchIcon como sugerencia en el searchView (8)

Estoy haciendo una aplicación donde, por ejemplo, cuando hago clic en la imagen (es un searchView)

¡Se abre el panel de búsqueda!

y parece

pero aquí se muestra el icono de búsqueda predeterminado (lupa) pero esto desaparece tan pronto como se ingresa texto

Pero no quiero que la lupa se muestre, incluso si se hace clic en la imagen por primera vez.

y aquí no estoy usando ningún archivo xml

mi código es

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..."); } } }


Acabo de encontrar el mismo problema, aquí hay algunos enlaces de referencia.

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

La clave está en la siguiente función, establece el icono como un 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; }


En mi aplicación he usado android.support.v7.widget.SearchView y para ocultar el ícono de búsqueda, esto funcionó para mí:

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


Prueba estas tres líneas:

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

* Funciona solo para android.widget.SearchView


Simplemente puse el atributo @null to searchHintIcon :

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

y apliqué ese estilo en mi tema de aplicación

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

Funciona para mi.


También he tenido problemas con esto. Combiné el tutorial que encontré y una respuesta existente encontrada aquí en .

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

Tenga en cuenta que searchView es un LinearLayout, así que use LinearLayout.LayoutParams para evitar una excepción.

También probé esto pero no quita la vista. Parece que no puedo entender por qué:

magImage.setVisibility(View.GONE);

Para las otras vistas que necesita cambiar, consulte este tutorial.


Use el atributo "searchHintIcon" en sus estilos para eso:

<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>

Puede reemplazar @null con cualquier resolución dibujable que desee


puedes probar esto

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..."); } } }


TL; DR: Basta con establecer la EditText de EditText en la cadena vacía para eliminar el icono de sugerencia.

Encontré una respuesta que realmente funciona. Hay muchas cosas sobre cómo cambiar el ícono usando la reflexión, como se discutió en Styling the ActionBar SearchView . Este sitio web ES un gran recurso, pero desafortunadamente la sugerencia de búsqueda ImageView no cambia (aunque la reflexión no cause errores). La única forma en que pude eliminar esta imagen fue esta:

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

Debe colocar esto en su método onCreateOptionsMenu y obtener una referencia a su onCreateOptionsMenu en XML usando algo como:

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