2016-04-15 16 views
3

Ich habe einen Spinner und einen ArrayAdapter verwenden. Im Adapter verwende ich "android.R.layout.simple_list_item_1", ​​wie folgt aus:Android ändern Textfarbe in einem Spinner

spinnerControlObjectType.setAdapter(new ArrayAdapter(getApplicationContext, android.R.layout.simple_list_item_1, list)) 

ich in android.R.layout.simple_list_item_1 sah und sehen das es einen Textstil wie diese hat:

android:textAppearance="?android:attr/textAppearanceListItemSmall"

Ich möchte "textAppearanceListItemSmall" in meinem Thema zu überschreiben, um es eine andere Farbe zu geben, wie kann ich das tun? Ich möchte nichts ableiten oder Codebeispiele schreiben. Ich bin sicher, dass es eine Möglichkeit gibt, die Farbe nur durch Ändern der theme.xml zu ändern.

In der Android-Dokumentation ist geschrieben: '... Verweis auf ein Stil-Attribut sagt im Wesentlichen, "verwenden Sie den Stil, der durch dieses Attribut im aktuellen Thema definiert ist." ...' (http://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes). Sie sagen "definiert" und "im aktuellen Thema" - wie kann ich es in meinem aktuellen Thema definieren? Macht mich Nüsse ...

+1

Mögliche Duplikate von [Wie Spinner Textgröße und Textfarbe ändern?] (Https://stackoverflow.com/questions/9476665/how-to-change-spinner-text-size-and-text-color) –

Antwort

1

ich meine eigene Frage zu beantworten - alles funktioniert wie die Dokumentation sagt. Mein Problem war, dass ich "android.R.layout.simple_list_item_1" in einer Spinner-Komponente verwenden wollte. Sobald ich "android.R.layout.simple_spinner_item" benutzt habe, funktionierte es.

0

dies versuchen,

 // Initializing an ArrayAdapter 
     final ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
       this,R.layout.spinner_item,plantsList){ 
      @Override 
      public View getDropDownView(int position, View convertView, 
             ViewGroup parent) { 
       View view = super.getDropDownView(position, convertView, parent); 
       TextView tv = (TextView) view; 

        // Set the Text color 
        tv.setTextColor(Color.parseColor("#FFC9A3FF")); 

       return view; 
      } 
     }; 
     spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item); 
     spinner.setAdapter(spinnerArrayAdapter); 
+0

Ich möchte nur einen Stil in meinem Thema ändern, um die Farbe zu ändern. Dies ist einfach zu viel Arbeit für eine einfache Farbänderung. Danke trotzdem, Pradeep! – tfh

5

Erstellen Sie eine benutzerdefinierte XML-Datei für Ihr Spinner Artikel

spinner_layout.xml

Add fertigte Farbe

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/custom_spinner" 
    android:textSize="16sp" 
    android:text="HELLO" 
    android:padding="10dp" 
    android:textColor="@color/colorAccent" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Verwenden Sie diese f ile zeigen Sie Ihre Spinner Artikel

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.spinner_layout,ar); 
     mSpinner.setAdapter(adapter); 
+1

Ich bin mir dessen bewusst. Aber für mich ist es nicht akzeptabel, eine neue XML-Ressourcendatei hinzuzufügen, um nur eine Farbe zu ändern. Ich möchte die Farbe ändern, indem ich nur Sachen in meiner theme.xml ändere. Danke trotzdem! – tfh

5

Sie sollten nur über das genannte Attribut in Ihrem Thema, in diesem Beispiel ich verwende AppCompat Thema als Eltern, aber Sie können das zu jedem anderen Thema ändern. Je nachdem, was Sie wollen, sollten Sie Themen und Stile Ressourcen für verschiedene Versionen von Android machen:

<style name="MyTheme" parent="Theme.AppCompat.Light"> 
    <item name="android:textAppearanceListItemSmall">@style/MySpinnerStyle</item> 
</style> 

<style name="MySpinnerStyle" parent="TextAppearance.AppCompat.Subhead"> 
    <item name="android:textSize">13sp</item> 
    <item name="android:textColor">@color/white</item> 
</style> 
+0

Dies ist genau das, was ich suche - ich habe im Grunde das in meinem Code, aber es funktioniert einfach nicht. Aber ich vergleiche meine für eine Sekunde wieder mit deiner. – tfh

+0

Sie sollten den Stil wahrscheinlich in Ihre ursprüngliche Frage einbeziehen, dann ist es vielleicht etwas Einfaches, das mit der XML falsch ist. – oiZo