Changer la couleur de l'arrière-plan de spinner mais garder la flèche
j'ai lu plusieurs choses à ce sujet, mais je ne trouve pas ce dont j'ai besoin. Je veux garder la flèche grise mais je veux enlever la barre horizontale de style par défaut et avoir un fond blanc. Avez-vous une idée de comment je peux faire cela ?
voici ce que j'ai maintenant (style spinner par défaut):
voici ce que je veux:
10 réponses
j'ai fait une petite modification basée sur la réponse de @Mansur Khan.
nous n'avons pas besoin d'ajouter une vue D'image dans ce cas car le spinner a déjà une flèche triangle. Vérifiez donc 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
pour mémoire, j'ai trouvé une solution facile : envelopper votre spinner dans une mise en page relative et ajouter 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>
une solution simple qui ne vous oblige pas à créer votre propre dessin pour la flèche est d'envelopper le fileur avec un RelativeLayout
, et de définir la couleur de fond dans le RelativeLayout
, pas le fileur:
<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 Onitemseltedlistener.
une bonne façon de personnaliser spinners et tout autre contrôle Android est d'utiliser le Android Asset Studio site et choisir le Android Holo Colors Generator . Cela créera tous les atouts dont vous pourriez avoir besoin, y compris le "soulignement". Il génère également les fichiers XML qui implémentent les changements.
une fois que vous téléchargez le fichier ZIP à partir de ce site, il vous suffit de copier les images et les fichiers XML dans votre projet.
vous pouvez alors éditer les fichiers image nécessaires pour supprimer le soulignement. Ce sont des fichiers 9-Patch, appelés:
- apptheme_spinner_default_holo_light.9.png
- apptheme_spinner_disabled_holo_light.9.png
- apptheme_spinner_focused_holo_light.9.png
- apptheme_spinner_pressed_holo_light.9.png
pour un explication du processus, et pour voir quelques exemples de fichiers XML, veuillez vous référer à ma réponse:
voici le code de custom spinner. S'il vous plaît vérifier et me dire. Pas encore, j'ai testé cette. 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 drawable(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>
Edit:
veuillez consulter ce lien qui vous donne une idée de la faire. personnaliser spinner historique
ou
vous pouvez faire quelque chose comme cela.
<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>
la mise en page ci-dessous va créer un fond dans spinner avec la flèche de couleur de désir vers le bas
<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 fournissent la couleur d'arrière-plan et à coins arrondis
<?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>
Hi au lieu d'enrouler le composant Spinner autour de la disposition des parents comme LinearLayout, RelativeLayout etc qui augmente l'analyse de la disposition il suffit de créer un drawable appelé spinner_bg.xml sous le dossier de tirage.
<?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>
placez spinner_bg comme arrière-plan de votre spinner et cela fonctionne comme charme:
<Spinner
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:background="@drawable/spinner_bg" />
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 sans faire des mises en page complexes est-ce:
utilisez ce xml pour votre arrière-plan 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>