J'ai lu plusieurs choses à ce sujet mais je ne trouve pas ce dont j'ai besoin… Je veux conserver la flèche grise mais je veux supprimer la barre horizontale du style par défaut et avoir un arrière-plan blanc Avez-vous une idée de comment je peux faire ça?
Voici ce que j'ai maintenant (style spinner par défaut):
Voici ce que je veux:
Pour mémoire, j'ai trouvé une solution simple: Enveloppez votre disque dans une mise en page relative et ajoutez une image:
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="@drawable/borderbottom_white"<!-- white background with bottom border -->
Android:layout_marginTop="15dp" >
<Spinner
Android:id="@+id/postfield_category"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:textSize="16sp"
Android:background="@null"
Android:minHeight="0dp" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_alignParentRight="true"
Android:src="@drawable/arrowspinner" />
</RelativeLayout>
J'ai fait une petite modification basée sur la réponse de @Mansur Khan.
Il n'est pas nécessaire d'ajouter un ImageView dans ce cas, car la roulette a déjà une flèche triangulaire. Alors vérifiez le code ci-dessous:
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:padding="8dp"
Android:background="#FFFFFF">
<Spinner
style="@style/Widget.AppCompat.DropDownItem.Spinner"
Android:layout_width="match_parent"
Android:layout_height="70dp"
Android:id="@+id/sign_up_country"
/>
</RelativeLayout>
Voici la capture d'écran
Une solution simple qui ne vous oblige pas à créer votre propre dessin pour la flèche consiste à envelopper la casserole avec une variable RelativeLayout
et à définir la couleur d'arrière-plan dans la variable RelativeLayout
et non dans la rotation:
<RelativeLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="#f00" >
<Spinner
Android:id="@+id/spinner1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</RelativeLayout>
Utilisez ceci:
yourspinner.setOnItemSelectedListener(this);
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
((TextView) yourspinner.getSelectedView()).setBackgroundColor(getResources()
.getColor(R.color.your_color));
}
et votre classe devrait implémenter OnItemSelectedListener.
Salut au lieu d’enrouler le composant Spinner autour des modèles parents tels que LinearLayout, RelativeLayout, etc., ce qui augmente l’analyse du modèle, il suffit de créer un dessin appelé spinner_bg.xml dans un dossier pouvant être dessiné.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item>
<bitmap
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="right"
Android:src="@drawable/icn_dropdown_arw" />
</item>
</layer-list>
Définissez spinner_bg comme arrière-plan de votre spinner et cela fonctionnera à merveille:
<Spinner
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:padding="5dp"
Android:background="@drawable/spinner_bg" />
Un bon moyen de personnaliser les disques et tous les autres contrôles Android consiste à utiliser le Android Asset Studio site et à choisir le Android Holo Colors Generator . Cela créera tous les actifs dont vous pourriez avoir besoin, y compris le "soulignement". Il génère également les fichiers XML qui implémentent les modifications.
Une fois que vous avez téléchargé le fichier Zip à partir de ce site, il vous suffit de copier les images et les fichiers XML dans votre projet.
Vous pouvez ensuite éditer les fichiers image requis pour supprimer le soulignement. Ce sont des fichiers 9-Patch, appelés:
Pour une explication plus complète du processus et voir certains des exemples de fichiers XML, veuillez vous reporter à ma réponse:
la disposition ci-dessous créera un arrière-plan en spirale avec la couleur souhaitée flèche déroulante
<LinearLayout
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight=".6"
Android:background="@drawable/edit_text_rounded_shape"
Android:gravity="center|center_vertical">
<Spinner
Android:id="@+id/spinerComanyName"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="4dp"
Android:layout_weight=".6"
Android:layout_gravity="center"
Android:entries="@array/spinner_item"
Android:spinnerMode="dropdown"
Android:theme="@style/Spinner"
/>
</LinearLayout>
<style name="Spinner">
<!-- Used for the bottom line when not selected / focused -->
<item name="colorControlNormal">@color/black</item>
<item name="colorControlActivated">@color/colorPrimary</item>
<!-- colorControlActivated & colorControlHighlight use the colorAccent color by default -->
</style>
edit_text_rounded_shape qui fournit une couleur de fond et un coin arrondi
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="10dp">
<solid Android:color="@color/white"/>
<stroke Android:color="@color/grey"/>
<corners
Android:bottomRightRadius="15dp"
Android:bottomLeftRadius="15dp"
Android:topLeftRadius="15dp"
Android:topRightRadius="15dp"/>
</shape>
Toujours tout en travaillant avec les fileuses, les boutons et les EditTexts et ayant également besoin d'insérer un dessinable, j'enveloppe souvent l'élément (spinner, EditText, etc.) dans un FrameLayout. Vérifiez un exemple:
<FrameLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Spinner
Android:id="@+id/spinner_component"
Android:layout_width="match_parent"
Android:layout_height="45dp"
Android:background="@drawable/your_rectangle_style"
Android:textColor="@color/your_text_color" />
<ImageView
Android:layout_width="11dp"
Android:layout_height="9dp"
Android:src="@drawable/arrow_spinner"
Android:layout_gravity="right|center_vertical"
Android:layout_marginRight="7dp" />
</FrameLayout>
Un autre conseil important est que FrameLayout vous permet de définir des fonctions OnClick sur le dessin, par exemple.
Android:layout_alignParentRight="true"
Android:layout_width="@dimen/spinner_width"
Android:layout_height="wrap_content"
Android:id="@+id/spnLocation"
Android:entries="@array/labelFamily"
Android:layout_centerVertical="true"
Android:backgroundTint="@color/color_gray"
ce travail pour moi
Je pense que la meilleure façon de ne pas faire les mises en page complexes est la suivante:
Utilisez ce xml pour votre fond de spinner et vous êtes prêt à partir !!!
<item Android:state_pressed="true">
<shape>
<solid Android:color="@color/materialBlueGray600" />
<corners Android:radius="3dp" />
</shape>
</item>
<item Android:state_selected="true">
<shape>
<solid Android:color="@color/materialGray50" />
<corners Android:radius="3dp" />
</shape>
</item>
<item>
<layer-list>
<item>
<shape>
<solid Android:color="@color/materialGray50" />
<corners Android:radius="3dp" />
</shape>
</item>
<item Android:gravity="right">
<bitmap Android:antialias="true" Android:gravity="right" Android:src="@drawable/ic_expand_small" />
</item>
</layer-list>
</item>
Voici le code de spinner personnalisé. S'il vous plaît vérifier et dites-moi. Pas encore j'ai testé cela. Alors s'il vous plaît informez-moi après avoir vérifié si cela résout votre problème.
<Spinner
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/spinner_background"
Android:gravity="center"
Android:paddingRight="10dp"
Android:spinnerMode="dropdown"
Android:textColor="your text color"
Android:textSize="your text size" />
Voici le dessinable (spinner_background.xml) pour créer l’arrière-plan de spinner.
<?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="border color" />
<corners Android:radius="3dp" />
</shape>
</item>
<item
Android:bottom="1dp"
Android:left="1dp"
Android:right="1dp"
Android:top="1dp">
<shape Android:shape="rectangle" >
<solid Android:color="@Android:color/white" />
<corners Android:radius="3dp" />
</shape>
</item>
</layer-list>
Modifier:
s'il vous plaît vérifier ce lien qui vous donne une idée à faire . Personnaliser l'arrière-plan spinner
OR
vous pouvez faire quelque chose comme ça.
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:background="spinner background image">
<Spinner
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@null"/>
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_alignParentRight="true"
Android:src="arrow image" />
</RelativeLayout>