web-dev-qa-db-fra.com

Android ajoute l'image de la flèche à spinner

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? 

19
user3781214

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" />
57
Aniruddha

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>
1
Rob

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>

1
siddharth patel

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>
1
takahawk

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" />
0
Jasmine John