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:

Introduzca aquí la descripción de la imagen

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. Introduzca aquí la descripción de la imagen

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?

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

  • Android - Animar el diálogo emergente con efecto de rebote
  • Obtener la vista de RecyclerView por AdapterPosition
  • Android ViewAnimator / ViewFlipper / ViewSwitcher y valor de hardcoded para setDisplayedChild
  • Id de vista siguiente como un atributo personalizado en android
  • Cómo hacer una rotación de imagen suave en Android?
  • ¿Cómo obtener el lienzo actual?
  • Cuál es la ventaja de usar el espacio sobre la vista
  • Ver onDraw (Canvas c) versus dibujar (Canvas c) en android?
  • Android ListView en el widget onClick no funciona
  • Calidad de la animación de rotación de Android
  • ¿Existe un reemplazo para el widget Galería con Reciclado de vistas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.