personalizar - android loading spinner
Android aƱade la imagen de la flecha al hilandero (5)
Configure su icono de imagen en Spinner:
<item>
<layer-list>
<item>
<color android:color="@android:color/white" />
</item>
<item>
<bitmap android:gravity="center_vertical|right" android:src="@drawable/down_arrow" />
</item>
</layer-list>
</item>
He creado un dibujable de fondo que utilizo para un hilandero. Me gustaría ahora, pero una imagen de flecha dentro de este fondo. He intentado cosas como android: drawableRight = "arrowimage", pero esto no parece mostrar nada. ¿Alguien sabe cómo puedo incluir una imagen en mi fondo personalizado para un hilandero?
Cree un XML en una carpeta dibujable con cualquier nombre, por ejemplo, spinner_bg.xml y agregue las siguientes líneas
<?xml version="1.0"
encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<item>
<shape>
<gradient android:angle="90"
android:endColor="#ffffff"
android:startColor="#ffffff"
android:type="linear" />
<stroke android:width="1dp"
android:color="#504a4b" />
<corners android:radius="5dp" />
<padding android:bottom="3dp"
android:left="3dp"
android:right="3dp"
android:top="3dp" />
</shape>
</item>
<item>
<bitmap android:gravity="bottom|right"
android:src="@drawable/spinner_ab_default_holo_dark_am" />
// you can use any other image here, instead of default_holo_dark_am
</item>
</layer-list>
</item>
</selector>
Agregue las siguientes líneas a su styles.xml que está dentro de la carpeta de valores
<style name="spinner_style" >
<item name="android:background">@drawable/spinner_bg</item>
<item name="android:layout_marginLeft">10dp</item>
<item name="android:layout_marginRight">10dp</item>
<item name="android:layout_marginBottom">10dp</item>
<item name="android:paddingLeft">8dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
</style>
Ahora agrega este estilo a tu hilandero como
<Spinner android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/spinner_style"
android:popupBackground="#cccccc" />
Esto funciona para mí. Puede que te falte el estado predeterminado. Sin publicar tu código es difícil decirlo.
<!-- theme -->
<item name="android:dropDownSpinnerStyle">@style/mySpinnerStyle</item>
<!-- style -->
<style name="mySpinnerStyle" parent="android:Widget.Holo.Spinner">
<item name="android:background">@drawable/mySpinner_background</item>
</style>
<!-- mySpinner_background -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/mySpinner_disabled" />
<item android:state_pressed="true"
android:drawable="@drawable/mySpinner_pressed" />
<item android:state_pressed="false" android:state_focused="true"
android:drawable="@drawable/mySpinner_focused" />
<item android:drawable="@drawable/mySpinner_default" />
</selector>
Esto me ha funcionado:
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Light"
android:spinnerMode="dropdown" />
La solución de Aniruddha funcionó bien para mí, cuando usé JellyBean (4.2.2) o Kitkat (4.4). Pero desafortunadamente en Marshmallow (6.0) tengo una excepción, posible causa explicada aquí: Uso de recursos dibujables
Terminé haciendo un truco y coloqué el spinner en LinearLayout con ImageView de esta manera:
<LinearLayout
android:id="@+id/spinner_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_arrow_drawable"/>
</LinearLayout>