Problema de estilo al superponer getDropDownView en ArrayAdapter
Estoy experimentando un comportamiento extraño al sobreescribir el método ArrayAdapter
de ArrayAdapter
. Necesito anular este método para mostrar el valor de cadena correcto fuera de mi objeto personalizado. Así es como se ve mi adaptador de matriz:
ArrayAdapter<NoteType> adapter = new ArrayAdapter<NoteType>(this, android.R.layout.simple_spinner_item, lstNoteTypes){ @Override public View getView(int position, View convertView, ViewGroup parent) { TextView lbl = (TextView) super.getView(position, convertView, parent); lbl.setText(getItem(position).getName()); return lbl; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { TextView lbl = (TextView) super.getView(position, convertView, parent); lbl.setText(getItem(position).getName()); return lbl; } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Así que cuando reemplazo getDropDownView
, mi Spinner se ve como abajo – la altura del artículo es muy pequeño en tamaño y que no es lo que quiero:
- Incluyendo las actividades de Android (y sus diseños) en archivos JAR
- Mostrar enormes imágenes en Android
- ¿Cómo se basan las coordenadas de un Android onTouchEvent MotionEvent?
- Android View y ViewGroup
- ¿Cómo obtener el lienzo actual?
Pero cuando comento (o no anule) el método getDropDownView
, entonces se ve bien con el estilo por defecto, pero luego no puedo inyectar el valor de texto necesario en elementos de lista desplegable.
Tenga en cuenta la altura de los elementos en ambas imágenes sólo por sobreescribir getDropDownView
.
¿Alguna sugerencia? O lo que me falta en mi código?
- Cómo restablecer completamente la vista web de Android antes de cargar la nueva solicitud
- Cómo pasar un valor de cadena a webView de una actividad
- Id de vista siguiente como un atributo personalizado en android
- ¿Es posible cambiar el navegador / motor predeterminado para la vista Web de Android?
- ¿Cómo mostrar la lista desplegable-ver debajo de la vista particular en android?
- android setAlpha lento
- ¿Es posible pasar un onTouchEvent a varias vistas en Android?
- Borrar una imagen girada en Android no muestra borrar la ruta correcta
Si escribió NoteType usted mismo, anule toString () en él. Simplemente agregue lo siguiente a su clase NoteType:
@Override public String toString() { return getName(); }
Creo que podría saber por qué sucede esto, pero tengo que probarlo, así que por ahora aquí hay otra solución (rápida).
Puesto que el Spinner
llama a toString()
en cada objeto del ArrayAdapter
, puede sobrescribir el método toString()
en su clase NoteType
y dejar que devuelva su String (en lugar de la implementación toString()
predeterminada). De esta manera no tendría que anular getDropDownView()
en su adaptador, pero aún así tiene el estilo predeterminado y sus datos en él.
Me encontré con este mismo problema con una clase personalizada BaseAdapter. Esto también se mencionó en un comentario, pero la solución es en realidad muy simple: simplemente añada el relleno al TextView que regresa del método getDropDownView.
No deberías agregar ningún archivo adicional para esto y no estaba usando ActionBarSherlock (sólo el Spinner predeterminado), así que no creo que esté relacionado con eso. Aquí está el código que funcionó para mí, adaptado a su ejemplo:
@Override public View getView(int position, View convertView, ViewGroup parent) { // Create custom TextView TextView lbl = (TextView) super.getView(position, convertView, parent); lbl.setText(getItem(position).getName()); // Add padding to the TextView, scaled to device final float scale = context.getResources().getDisplayMetrics().density; int px = (int) (10 * scale + 0.5f); lbl.setPadding(px, px, px, px); return lbl; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { // Create custom TextView TextView lbl = (TextView) super.getView(position, convertView, parent); lbl.setText(getItem(position).getName()); // Add padding to the TextView, scaled to device final float scale = context.getResources().getDisplayMetrics().density; int px = (int) (10 * scale + 0.5f); lbl.setPadding(px, px, px, px); return lbl }
Tenía que hacer lo mismo, así que hizo mi propia vista para ser utilizado como checkedTextView
En esto lo más importante es establecer la altura como para android: layout_height = "? Attr / dropdownListPreferredItemHeight" Yo estaba usando un adaptador de base
- Editor de temas de Android Studio que no muestra las vistas previas
- ¿Cuál es la utilidad de usar PhoneGap?