studio - manual de programacion android pdf
Cómo crear spinner android sin triángulo abajo en el lado derecho del widget (8)
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
¿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("<Title>")
.setItems(R.array.<ItemsArrayName>, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}}).show();
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"
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<CharSequence> 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.
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:
<Spinner
android:id="@+id/my_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:prompt="@string/my_prompt"
android:background="@android:drawable/btn_default"
/>
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://i56.tinypic.com/3026kw4.png
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 compiladas 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://i52.tinypic.com/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 resto de los píxeles son completamente transparentes. El antialiasing cerca del borde puede producir resultados inesperados.
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!
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.
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:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style parent="@android:style/Widget.Spinner" name="SpinnerAsEditText">
<item name="android:background">@android:drawable/edit_text</item>
</style>
</resources>
A continuación, en su diseño, agregue el Spinner así:
<Spinner style="@style/SpinnerAsEditText" anyOtherAttributeYouNeed="..."></Spinner>
Eso es todo, ahora el spinner se verá como un simple EditText, sin esa desagradable y molesta flecha hacia abajo.