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.
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:
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"
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.
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" />
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);
}
});
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
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:
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);
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;
}