web-dev-qa-db-fra.com

Android: Où se cache l'attribut de couleur du texte du widget Spinner?

J'essaie de changer la couleur du texte de l'élément unique affiché dans le bouton fléché après avoir sélectionné un élément dans la liste déroulante. Cela fait maintenant une heure que je parcoure les thèmes.xml et styles.xml dans le SDK Android, et je n'arrive pas à trouver d'où le Spinner tire la valeur de couleur.

Pour clarifier, je n'essaye PAS de changer la couleur d'un élément déroulant, j'essaie de changer la couleur du texte affiché du compteur lorsqu'il n'y a pas de menu déroulant. Je suppose que vous pourriez appeler cela le texte du bouton du disque.

73

Je pense que c'est probablement ce bit dans styles.xml

<style name="Widget.TextView.SpinnerItem">
    <item name="Android:textAppearance">@style/TextAppearance.Widget.TextView.SpinnerItem</item>
</style>
<style name="Widget.DropDownItem.Spinner">
    <item name="Android:checkMark">?android:attr/listChoiceIndicatorSingle</item>
</style>

- = EDIT = - Voici le résultat: enter image description here

et voici comment c'est fait:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MooTheme" parent="Android:Theme">
        <item name="Android:spinnerItemStyle">@style/MooSpinnerItem</item>
    </style>

    <style name="MooSpinnerItem" parent="Android:Widget.TextView.SpinnerItem">
        <item name="Android:textAppearance">@style/MooTextAppearanceSpinnerItem</item>
    </style>

    <style name="MooTextAppearanceSpinnerItem" parent="Android:TextAppearance.Widget.TextView.SpinnerItem">
        <item name="Android:textColor">#F00</item>
    </style>
</resources>

Ensuite, ajoutez simplement ceci à la balise de l'application dans votre AndroidManifest.xml

Android:theme="@style/MooTheme"
103
CaseyB

Oui, CaseyB a raison.

Voici comment définir la couleur du texte en rotation, un petit exemple simple:

styles.xml

    <style name="Theme.NoTitleBar.WithColoredSpinners" parent="@Android:style/Theme.NoTitleBar">
        <item name="Android:spinnerItemStyle">@style/SpinnerItem</item>
        <item name="Android:spinnerDropDownItemStyle">@style/SpinnerItem.DropDownItem</item>
    </style>

    <style name="SpinnerItem" parent="@Android:style/Widget.TextView.SpinnerItem">
        <item name="Android:textColor">#00FF00</item>
    </style>

    <style name="SpinnerItem.DropDownItem" parent="@Android:style/Widget.DropDownItem.Spinner">
        <item name="Android:textColor">#FF0000</item>
    </style>

</resources>

Puis dans votre manifeste:

<application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name"
        Android:theme="@style/Theme.NoTitleBar.WithColoredSpinners" >

Le texte à l'extérieur de toutes vos machines à filer sera maintenant vert et le texte des menus déroulants sera rouge.

51
Blundell

Je l'ai fait en utilisant une autre technique simple,

copiez les dossiers simple_spinner_item.xml et simple_spinner_dropdown_item.xml à partir du dossier res/layout Android et copiez-les dans votre projet.

Puis modifiez les lignes suivantes

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, Android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(Android.R.layout.simple_spinner_dropdown_item);
spinnerSubject.setAdapter(adapter);

comme:

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
spinnerSubject.setAdapter(adapter);

Le reste est facile, vous pouvez maintenant modifier le fichier simple_spinner_item.xml pour modifier l’apparence d’un élément visible sur le widget Spinner, et le fichier simple_spinner_dropdown_item.xml pour modifier l’apparence de la liste déroulante. 

Par exemple, Ma structure d’activité contient:

<Spinner
Android:id="@+id/mo_spinnerSubject"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="5dp"
Android:background="@drawable/spinnerset_background" />

et mon simple_spinner_item.xml contient maintenant:

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:singleLine="true"
Android:textColor="@color/custom_white"
Android:textSize="16sp" />

et le simple_spinner_dropdown_item.xml ressemble à:

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/listPreferredItemHeight"
Android:background="@color/custom_black"
Android:ellipsize="Marquee"
Android:singleLine="true"
Android:textColor="@color/custom_white" />
28
saad

Vous pouvez utiliser setOnItemSelectedListener sur l’objet Spinner,

spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        ((TextView)parentView.getChildAt(0)).setTextColor(Color.rgb(249, 249, 249));
        // OR ((TextView)parentView.getChildAt(0)).setTextColor(Color.RED);
    }
});
26
Rukmal Dias

c'est très simple en fait. Je cherchais partout il vous suffisait de créer du style et de le mettre sur spinner

commencez par créer votre thème dans Style.xml

 <style name="spinnerTheme" parent="Android:Theme">
    <item name="Android:textColor">@color/gray_dark</item>
</style>

puis dans votre xml où vous avez défini votre spinner, ajoutez ceci:

Android: theme = "@ style/spinnerTheme "

                       <Spinner
                        Android:id="@+id/spinner"
                        Android:layout_width="match_parent"
                        Android:layout_height="50dp"
                        Android:padding="10dp"
                        Android:paddingBottom="5dp"
                        Android:paddingLeft="10dp"
                        Android:layout_span="3"
                        Android:layout_weight="1.3"
                        Android:theme="@style/spinnerTheme"
                        Android:textSize="12sp"
                        Android:spinnerMode="dialog"
                        Android:clickable="false"/>

Profitez de codage

11
Pre_hacker

Je ne pense pas qu'il y ait une couleur associée au texte. Son plus probable prédéfini dans le code Android, pourrait devoir simplement faire votre propre si vous voulez changer la couleur du disque.

Cela inclurait la modification de la méthode ondraw () et vous dessineriez à quoi ressemblerait le viseur.

La seule chose que je pense pourrait potentiellement résoudre cette question est la propriété de style de la roulette.

Source: http://developer.Android.com/reference/Android/widget/Spinner.html

Cela pourrait aider:

http://www.designerandroid.com/?p=28

1
JoxTraex

cela a fonctionné pour moi créer votre propre fichier de mise en page avec une définition personnalisée pour l'élément spinner. 

custom_spinner.xml:
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/txt_spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:textSize="16sp"
Android:textColor="#ffffff" />

Changer l'élément de rotation en utilisant un adaptateur

Spinner spinner= (Spinner) findViewById(R.id.spinner1);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this,R.array.by_loc_array,R.layout.txt_spinner);
spinner.setAdapter(adapter);
0
Muhammad Dawood

Peut changer la couleur du texte en remplaçant la méthode getView comme suit:

new ArrayAdapter<String>(getContext(), Android.R.layout.simple_spinner_dropdown_item, list()){
                @Override
                public View getView(int position, View convertView, @NonNull ViewGroup parent) {
                    View view = super.getView(position, convertView, parent);
                    //change the color to which ever you want                    
                    ((CheckedTextView) view).setTextColor(Color.RED);
                    return view;
              }
0
Madhur