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:
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" />
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:
Et chaque solution ce que j'ai essayé jusqu'à présent:
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.
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>
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.
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. :)
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
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>
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>
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>