it-swarm.com.de

Android: Wo versteckt sich das Textfarbenattribut des Spinner-Widget?

Ich versuche, die Textfarbe des einzelnen Elements zu ändern, das in der Drehfeld-Schaltfläche angezeigt wird, nachdem Sie ein Element aus der Dropdown-Liste ausgewählt haben. Ich habe jetzt die Themes.xml und Styles.xml im Android SDK seit einer Stunde durchgelesen, und ich finde nicht, wo der Spinner den Farbwert bekommt.

Zur Verdeutlichung versuche ich NICHT, die Farbe eines Dropdown-Elements zu ändern. Ich versuche, die Farbe des angezeigten Spinner-Textes zu ändern, wenn kein Dropdown angezeigt wird. Ich denke, man könnte es den "Button" -Text des Spinners nennen.

73

Ich denke, es ist wahrscheinlich dieses bisschen in 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 = - Hier ist das Ergebnis: enter image description here

und so wird's gemacht:

<?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>

Dann fügen Sie dies einfach zum Anwendungstag in Ihrer AndroidManifest.xml hinzu

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

Ja, CaseyB ist richtig.

So lege ich die Textfarbe für den Spinner fest, ein kleines einfaches Beispiel:

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>

Dann in deinem Manifest:

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

Der Text auf der Außenseite aller Ihrer Spinner ist jetzt grün und der Text in den Dropdown-Listen ist rot.

51
Blundell

Ich tat dies mit einer anderen einfachen Technik,

kopieren Sie die Dateien simple_spinner_item.xml und simple_spinner_dropdown_item.xml aus dem Android-Ordner res/layout und kopieren Sie sie in Ihr Projekt.

Ändern Sie dann die folgenden Zeilen

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

wie:

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

Der Rest ist einfach. Sie können jetzt die Datei simple_spinner_item.xml bearbeiten, um die Anzeige eines sichtbaren Elements im Spinner-Widget zu bearbeiten, und die Datei simple_spinner_dropdown_item.xml, um die Darstellung der Dropdown-Liste zu ändern. 

Zum Beispiel Mein Aktivitätslayout enthält:

<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" />

und meine simple_spinner_item.xml enthält jetzt:

<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" />

und die simple_spinner_dropdown_item.xml sieht folgendermaßen aus:

<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

Sie können setOnItemSelectedListener für das Spinner-Objekt verwenden.

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

es ist eigentlich sehr einfach. Ich war auf der Suche nach allem, was Sie brauchen, um Stil zu schaffen und auf Spinner zu setzen

erstelle dein Theme in Style.xml

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

fügen Sie dann in Ihrer XML-Datei, in der Sie Ihren Spinner festgelegt haben, Folgendes hinzu:

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"/>

Viel Spaß beim Codieren

11
Pre_hacker

Ich denke nicht, dass es eine Farbe gibt, die mit dem Text verbunden ist. Es ist höchstwahrscheinlich im Code Android vordefiniert. Sie müssen möglicherweise nur Ihren eigenen Code erstellen, wenn Sie die Farbe des Spinners ändern möchten.

Dazu gehört, dass Sie die ondraw () -Methode ändern und das Drehfeld so zeichnen, wie es aussehen soll.

Das einzige, was ich denke, könnte möglicherweise lösen dieses Problem ist die Stileigenschaft des Spinners.

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

Dies könnte helfen:

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

1
JoxTraex

dies hat für mich funktioniert. Erstellen Sie Ihre eigene Layout-Datei mit einer benutzerdefinierten Definition für das Spinnerelement. 

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" />

Ändern Sie den Spinner mit dem Adapter

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

Kann die Textfarbe ändern, indem Sie die getView-Methode wie folgt überschreiben:

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