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:
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" />
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:
Et toutes les solutions que j'ai essayées jusqu'à présent:
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.
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>
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.
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. :)
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
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>
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>
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>