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:
- Android 3.0, Vista previa de widgets
- ¿Mostrar la vista por encima de la barra de estado?
- Android: agrega la vista al diseño haciendo que el diseño esté delante de ActionBar
- Vista de arrastrar androide lisa
- Temporizador de rectángulo de dibujo de Android con animación
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?
- Selección de niños en ExpandableListView
- Cómo traer una vista al frente sin llamar bringToFront ()?
- Reemplazar fragmento dentro de un ViewPager
- Android ViewPropertyAnimator no se escala al mismo tiempo
- Android spinner cerrar
- android webview Relacionados
- ¿Hay una forma de compensar una vista desde el centro en Android?
- ¿Cómo ampliar la vista sin problemas en Android?
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?