web-dev-qa-db-fra.com

Comment modifier la couleur de la liste d'un spinner en Android

Je crée une nouvelle spinner de manière dynamique, comment puis-je modifier la couleur de mon arrière-plan de la liste?

la couleur de fond actuelle est gris foncé:

two muppets Lorsque je change l'attribut d'arrière-plan du spinner au blanc, je reçois cette situation indésirable:

two muppets Je veux que cela soit transparent dans l'activité, et seulement lorsque j'ouvre la filante (appuyez dessus), je veux que le fond soit blanc.

Voici le code que je crée la fileuse avec:

Je crée l'adaptateur avec:

    mAdapter = new ArrayAdapter<String>(getApplicationContext(), 
                                     R.layout.spinner, R.id.Language, lang);
    LinearLayout layoutHolder = 
                         (LinearLayout)findViewById(R.id.RegisterFormLayout);
    Spinner spinner = new Spinner(getApplicationContext());
    LayoutParams layParams= new 
                Spinner.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,       
                                         ViewGroup.LayoutParams.WRAP_CONTENT);
    spinner.setLayoutParams(layParams);
    spinner.setAdapter(mAdapter); 
    spinner.setOnItemSelectedListener(new myOnItemSelectedListener());
    if (lang != null)
       spinner.setSelection(lang.intValue());
    spinnerList.add(spinner);
    layoutHolder.addView(spinner);

my Spinner.XML Layout est:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" 
Android:id="@+id/SpinnerLayout">

<TextView
    Android:id="@+id/Language"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:textColor="#ffffff"
    Android:background="#00ffffff"
    Android:padding="5dp" />
</LinearLayout>

toute suggestion?

16
Noam Mizrachi

La solution pour cela consiste à ajouter ce code lors de la création du spinner de manière dynamique:

spinner.setPopupBackgroundResource(R.drawable.spinner);

et pour créer Spinner.xml sous dossier digue:

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
    <solid Android:color="#ffffff" />
</shape>

Cette solution nécessite un niveau d'API de 16 et plus.

le résultat:

two muppets

12
Noam Mizrachi

Je pense que cette exigence ne peut pas être possible grâce à des changements thématiques. Étant donné que le constructeur de spinner attribue une valeur sur Popupbackground ATTER uniquement si vous écrivez dans la mise en page XML sinon elle utilisera la valeur de thème par défaut. comme ci-dessous

   <Spinner
    Android:id="@+id/spinner1"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:popupBackground="@Android:color/holo_green_dark" />

// juste essayer de changer de fond de popup

23
Rahul Patil

Pour résoudre votre problème, essayez ceci.

Android:popupBackground="#00826b"
2
Programer_saeed

dans mon spinner.xml

utilisez ceci à linearlayout: Android:background="#ffffff"

1
Dhaval Parmar