web-dev-qa-db-fra.com

Icône de liste déroulante Change Spinner

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

1. créer un dessin personnalisable

<?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 dessin comme fond d'arrière-plan:

<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:

 enter image description here

Comme vous pouvez le constater, cette solution n’est pas acceptable car l’icône doit être correctement alignée et non étirée.

Que puis-je faire pour que l'icône ne s'étire pas et ne l'aligne pas correctement?

MODIFIER

Puisqu'il n'y a pas encore de solutions de travail, je suppose que je dois préciser 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" />

 enter image description here

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 en bas à droite soit affichée, je veux que cette flèche soit affichée verticalement centrée à droite:

 enter image description here

Et toutes les solutions que j'ai essayées jusqu'à présent:

Flèche Dropdown Spinner

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

ne travaillait tout simplement pas. Ils avaient des icônes étirées ou la ligne de fond était manquante ou quelque chose d'autre a complètement mal tourné. Je veux juste une autre flèche.

30
Mulgard

Essayez d’appliquer le style suivant à votre fileuse en utilisant

style="@style/SpinnerTheme"

// Style de filage :

<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>
79
Pehlaj

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

Android:background="@drawable/spin"

Ici, je vais vous donner une image .9patch. essayez avec ça.

 enter image description here  enter image description here

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

définissez le nom de l'image comme suit: anyname.9.png et cliquez sur Enregistrer.

Profitez bien .. Happy Coading. :)

14
Ronak Selarka

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éez 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>

ensuite, appliquez ce style à votre spinner

3
Mehta

Avez-vous essayé de définir un arrière-plan personnalisé en XML? en diminuant la largeur du fond de Spinner qui correspond à votre flèche,.

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>

Sans utiliser AUCUNE liste déroulante à l'aide de 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
siddharth patel

Ajouter un thème à spinner

<Spinner style="@style/SpinnerTheme"
      Android:layout_width="match_parent"
      Android:layout_height="match_parent"/>

Ajoutez spinnerTheme à styles.xml

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

Ajouter Nouveau -> "Actif de vecteur" à dessiner avec par exemple "ic_keyboard_arrow_down_24dp"

Ajoutez spinner_background.xml à drawable

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <layer-list>
            <item Android:drawable="@drawable/ic_keyboard_arrow_down_24dp" Android:gravity="center_vertical|right" Android:right="5dp"/>
        </layer-list>
    </item>
</selector>
1
Moshood Awari

dummy.xml (rappelez-vous que la taille de l'image doit ê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 soit 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 la mise en page des résultats

0