Changer L'icône déroulante Spinner

Les solutions que j'ai trouvées pour changer l'icône déroulante spinner où tout:

1. créer un drawable personnalisé

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="true" android:state_pressed="false" />
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="true" android:state_pressed="true" />
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" android:state_focused="false" android:state_pressed="true" />
    <item android:drawable="@drawable/vector_drawable_ic_dropdown_black" />
</selector>

2. Définissez le drawable comme arrière-plan du spinner:

<Spinner
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:background="@drawable/custom_spinner_icon"
    android:gravity="center"
    android:paddingBottom="8dp"
    android:paddingTop="8dp"
    android:textColor="@color/textcolorprimary" />

Et le résultat est:

entrez la description de l'image ici

Comme vous pouvez le voir, ce n'est pas une solution acceptable car l'icône doit être alignée à droite et non étirée.

Que puis-je faire pour que l'icône ne s'étirer et de les aligner droit?

Modifier

Comme il n'y a pas encore de solutions de travail, je suppose que je dois spécifier ma question. Voici à quoi ressemble mon Spinner en utilisant le thème standard:

<Spinner
    android:id="@+id/products_download_spinner_language"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:gravity="center"
    android:paddingBottom="8dp"
    android:paddingTop="8dp"
    android:textColor="@color/textcolorprimary"
    android:theme="@android:style/Theme.Holo.Light.DarkActionBar" />

entrez la description de l'image ici

Et tout ce que je veux (ce n'est vraiment pas grand-chose je suppose) change la flèche. Je ne veux pas que cette flèche dans le coin inférieur droit soit affichée, je veux que cette flèche soit affichée verticalement centrée à droite:

entrez la description de l'image ici

Et chaque solution ce que j'ai essayé jusqu'à présent:

Flèche Déroulante Spinner

Comment définir la flèche déroulante dans spinner?

Tout simplement werent travailler. Ils avaient étiré des icônes ou la ligne de fond manquait ou quelque chose d'autre a totalement mal tourné. Je veux juste une autre flèche.

25
demandé sur Community 2016-05-24 14:00:04

6 réponses

Essayez d'appliquer le style suivant à votre spinner en utilisant

style="@style/SpinnerTheme"

//Spinner Style:

<style name="SpinnerTheme" parent="android:Widget.Spinner">
    <item name="android:background">@drawable/bg_spinner</item>
</style>

//bg_spinner.xml Remplacez le arrow_down_gray par votre flèche

<?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="0.33dp" android:color="#0fb1fa" />

                    <corners android:radius="0dp" />

                    <padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
                </shape>
            </item>

            <item android:right="5dp">

                <bitmap android:gravity="center_vertical|right" android:src="@drawable/arrow_down_gray" />

            </item>

        </layer-list>

    </item>

</selector>
62
répondu Pehlaj 2018-07-24 04:51:25

Pour cela, vous pouvez utiliser .9 Patch Image et tout simplement le mettre en arrière-plan.

android:background="@drawable/spin"

Ici, je vais vous donner .Image 9patch. essayez avec cette.

entrez la description de l'image ici entrez la description de l'image ici

Faites un clic droit sur l'image et cliquez sur Enregistrer l'Image sous

Définissez le nom de l'image comme ceci: anyname.9.png et appuyez sur Enregistrer.

Profitez.. Heureux Coading. :)

11
répondu Ronak Selarka 2016-05-24 11:59:42

Vous devez créer un arrière-plan personnalisé comme ceci:

<?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/drop_down"/> // you can place your dropdown image
            </item>
        </layer-list>
    </item>

</selector>

, Puis créer style pour spinner comme ceci:

<style name="spinner_style">
        <item name="android:background">@drawable/YOURCUSTOMBACKGROUND</item>
        <item name="android:layout_marginLeft">5dp</item>
        <item name="android:layout_marginRight">5dp</item>
        <item name="android:layout_marginBottom">5dp</item>
</style>

Après qu'appliquer ce style à votre spinner

3
répondu Mehta 2016-05-24 11:18:59

Avez-vous essayé de définir un arrière-plan personnalisé en xml? diminuer la largeur D'arrière-plan du Spinner qui fait ressembler votre flèche à ça.

Définissez une liste de calques avec un arrière-plan rectangle et votre icône de flèche personnalisée:

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/color_white" />
            <corners android:radius="2.5dp" />
        </shape>
    </item>
    <item android:right="64dp">
         <bitmap android:gravity="right|center_vertical"  
             android:src="@drawable/custom_spinner_icon">
         </bitmap>
    </item>
</layer-list>
2
répondu Francisco Durdin Garcia 2018-05-31 17:36:27

Sans utiliser de liste déroulante en utilisant votre icône déroulante

<?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" /><!--For gradient background-->

                <stroke android:width="1dp" android:color="#FFF" /><!--For Border background-->

                <corners android:radius="0dp" /><!--For background corner-->

                <padding android:bottom="3dp" android:left="3dp" android:right="6dp" android:top="3dp" /><!--For padding for all sides-->
            </shape>
        </item>
        <item>
            <bitmap android:gravity="center|right" android:src="@drawable/ic_down_arrow" /> // Replace with your Icon

        </item>
    </layer-list>
</item>

1
répondu siddharth patel 2017-09-29 05:15:12

Mannequin.xml (rappelez-vous que la taille de l'image devrait être inférieure)

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <layer-list android:opacity="transparent">
                <item android:width="60dp" android:gravity="left" android:start="20dp">
                    <bitmap  android:src="@drawable/down_button_dummy_dummy" android:gravity="left"/>
                </item>
            </layer-list>
        </item>
    </selector>

Extrait de fichier de mise en Page être comme

<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:cardUseCompatPadding="true"
        app:cardElevation="5dp"
        >
     <Spinner
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:background="@drawable/dummy">

     </Spinner>
    </android.support.v7.widget.CardView>

Cliquez pour voir l'image de mise en page des résultats

0
répondu RaviTejaSiddabattuni 2017-11-23 11:36:41