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