web-dev-qa-db-fra.com

Changer la couleur de fond de la roulette mais garder la flèche

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

enter image description here

Voici ce que je veux:

enter image description here

38
Mansur Khan

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>
24
Mansur Khan

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

Avant:  enter image description here

Après:  enter image description here

56
Chandler

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>
20
Tad

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.

4
Kishan

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" />
2

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:

  • 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 une explication plus complète du processus et voir certains des exemples de fichiers XML, veuillez vous reporter à ma réponse:

1
Richard Le Mesurier

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>
1
Sumit Kumar

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.

0
Fellipe Tavares

       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

0
Muhammad Dawood

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>

0
Hadi Note

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>
0
RIJO RV