J'ai créé un fond que je peux utiliser pour une roulette. Je voudrais maintenant, mais une image de flèche à l'intérieur de cet arrière-plan. J'ai essayé des choses comme Android: drawableRight = "arrowimage", mais cela ne semble rien montrer. Est-ce que quelqu'un sait comment je peux inclure une image dans mon arrière-plan personnalisé pour un disque?
Créez un fichier XML dans un dossier pouvant être appelé avec un nom, par exemple spinner_bg.xml et ajoutez les lignes suivantes
<?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>
Ajoutez les lignes suivantes à votre fichier styles.xml qui se trouve dans le dossier de valeurs
<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>
Maintenant, ajoutez ce style à votre spinner comme
<Spinner Android:id="@+id/spinner1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
style="@style/spinner_style"
Android:popupBackground="#cccccc" />
Cela fonctionne pour moi. Il se peut que vous manquiez l'état par défaut. Sans poster votre code, c'est difficile à dire.
<!-- 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>
Réglez votre image ICON sur 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>
La solution d'Aniruddha a bien fonctionné pour moi lorsque j'ai utilisé JellyBean (4.2.2) ou KitKat (4.4). Mais malheureusement sur Marshmallow (6.0), j’ai une exception, cause possible expliquée ici: Utilisation de ressources appelables
J'ai fini par faire un tour et placer Spinner dans LinearLayout avec ImageView comme ceci:
<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>
Cela a fonctionné pour moi:
<Spinner
Android:id="@+id/spinner"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Light"
Android:spinnerMode="dropdown" />