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

enter image description here

voici ce que je veux:

enter image description here

33
demandé sur Mansur Khan 2014-09-16 15:27:07

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

avant: enter image description here

après: enter image description here

48
répondu Chandler 2018-09-28 01:26:55

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>
20
répondu Mansur Khan 2014-09-16 13:13:42

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>
19
répondu Tad 2016-12-19 16:16:47

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.

4
répondu Kishan 2014-09-16 11:42:19

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:

1
répondu Richard Le Mesurier 2017-05-23 12:02:59

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>
1
répondu RIJO RV 2015-05-11 01:18:39

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>
1
répondu Sumit Kumar 2017-02-07 06:08:23

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" />
1
répondu Namrata Bagerwal 2017-05-03 12:22:06

       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
répondu Muhammad Dawood 2016-02-18 10:27:51

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>

0
répondu Hadi Note 2018-08-27 16:39:30