Cómo crear spinner android sin triángulo abajo en el lado derecho del widget

Tengo una pantalla donde el usuario tiene muchos elementos para ingresar, por lo que el espacio de la pantalla es muy escaso.

Quiero que el aspecto del widget en la pantalla (antes de que el usuario lo presione) sea similar a EditText o la parte izquierda del widget Spinner (sin el triángulo abajo normal) en el lado derecho del Spinner. Luego, cuando el usuario presione el widget, obtendrá el cuadro de diálogo de selección de Spinner normal.

¿Hay algún atributo de estilo de Spinner que pueda cambiar para lograr esto?

No he podido ver código como este.

Gracias

Una cosa que puedes hacer es tomar el código fuente de Spinner desde la base del código de Android, junto con los diseños y recursos relacionados, y utilizarlos para crear tu propio widget personalizado (probablemente solo tendrás que quitar la flecha del diseño y modificar el código un poco dependiendo de tus necesidades).

EDITAR: Tienes razón, seguir esa publicación fue realmente muy simple 🙂 Tienes que hacer dos cosas. Primero, cree un archivo de styles.xml bajo res / values, ábralo y agregue lo siguiente:

     

A continuación, en su diseño, agregue el Spinner así:

  

Eso es todo, ahora el spinner se verá como un simple EditText, sin esa desagradable y molesta flecha hacia abajo.

Esta es una pregunta bastante antigua, pero creo que sigue siendo relevante, así que aquí está mi respuesta:

El método más simple

La respuesta lencinhaus es correcta. Funciona, pero se puede hacer de una manera aún más simple: simplemente agrega otro fondo. El siguiente ejemplo utiliza el fondo de Button estándar para una apariencia más homogénea:

  

El estilo utilizado en la otra respuesta no es más que aplicar un fondo al widget. Eso se puede hacer directamente al widget, lo que ahorra la necesidad de un nuevo archivo xml. Por supuesto, si vas a aplicar un estilo al spinner de todos modos, no hay nada de malo en ese enfoque.

¿Por qué?

La clave para entender cómo funciona se encuentra en la descripción de los PNG de 9 parches . Las líneas a la derecha y en la parte inferior se utilizan para relleno, es decir, para evitar que su contenido utilice algún espacio. En este caso, el texto adentro. El fondo estándar de Spinner usa una imagen con una flecha a la derecha que está fuera del área de texto utilizable. Vea la figura 1 a continuación para una ilustración:

Figura 1. Fundamento original de Spinner 9-patch PNG http://sofes.miximages.com/android/404.gif
Figura 1. Spinner original de Spinner 9-patch PNG.

Solo quitar la flecha no es suficiente ya que el relleno permanece allí. Necesita usar una nueva imagen de 9 parches con un relleno reducido (consulte la figura 2 para ver un ejemplo basado en la figura 1) o use una de las imágenes comstackdas de 9 parches sin mucho relleno, como las de EditText ( @android:drawable/edit_text ) o Button ( @android:drawable/btn_default ).

Figura 2. Fundamento de Spinner modificado 9-patch PNG con relleno reducido http://sofes.miximages.com/android/2jfaxkw.png
Figura 2. Fundamento de Spinner modificado 9-patch PNG con relleno reducido.

Comprender esto te permitirá crear tus propios fondos para el Spinner (y, de hecho, para cualquier widget).

Una mejor explicación de los archivos de 9 parches se puede encontrar aquí

Es muy fácil crear los archivos con el ejecutable draw9patch desde el SDK ( lea sobre esto aquí ), pero nada le impide usar Photoshop o Gimp en su lugar. Recuerde, ¡los PNG de 9 parches son simplemente PNG! La única advertencia es asegurarte de que dibujas solo las líneas exteriores de los píxeles y que el rest de los píxeles son completamente transparentes. El antialiasing cerca del borde puede producir resultados inesperados.

Acabo de llegar a esta pregunta, porque mi spinner no mostraba el indicador triangular, ahora entiendo por qué: estaba configurando el fondo como “blanco”:

 android:background="#FFFFFFFF" 

Esto elimina el indicador de triángulo (la imagen de fondo del rotor y el relleno indicado por Aleadam).

Para mi problema, lo resuelvo agregando un LinearLayout principal solo para establecer el fondo en “blanco”.

Dale un fondo, la flecha desaparecerá.

 android:background="@drawable/bg" 

Estaba teniendo el mismo problema y cambié el estilo a:

 style="@style/Widget.AppCompat.Light.DropDownItem.Spinner" 

Y funcionó.

Qué extraño, está ubicado en DropDownItem .

Mientras que el que tiene el triángulo inferior se llama normal.

¡Aclamaciones!

En la cuestión relacionada con el espacio ocupado cuando haces clic en la flecha giratoria, descubrí por accidente que puedes quitar esos grandes indicadores de selección de la derecha. Obtienes una lista básica separada por líneas, pero puedes hacer clic en un elemento y todavía funciona.

Configure una ruleta como esta para obtener los indicadores de selección:

  Spinner s1 = (Spinner) findViewById(R.id.spinner1); ArrayAdapter adapter1 = ArrayAdapter.createFromResource( this, R.array.petals, android.R.layout.simple_spinner_item); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s1.setAdapter(adapter1); 

Para ningún indicador simplemente deje fuera la línea setDropDownViewResource.

¿Por qué no vas a un diálogo con la lista? De acuerdo con sus requisitos, cree un campo de texto de edición, agregue setOnFocusChangeListener y luego muestre un cuadro de diálogo con los elementos de la lista en el método de Focus Change (). Para el diálogo con elementos de la lista

 new AlertDialog.Builder(this) .setTitle("") .setItems(R.array.<itemsarrayname>, new DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub }}).show();</itemsarrayname> 

Ninguna respuesta fue útil para mí, así que aquí hay una solución realmente simple de una sola línea que funcionó.

  //some spinner initialisation stuff-> mySpinner.setAdapter(adapter); //some spinner initialisation stuff-> mySpinner.getBackground().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); 

No puedo decir con certeza si funcionará solo con un diseño de ruleta predeterminado, pero funcionó bien con mi costumbre que creé para otras necesidades.