Android: Where is the Spinner widget's text color attribute hiding?
Solution 1
I think it's probably this bit 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 =- Here's the result:
and here's how it's done:
<?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>
Then just add this to the application tag in your AndroidManifest.xml
android:theme="@style/MooTheme"
Solution 2
Yeah CaseyB is correct.
Here's how I set the spinner text color, a little simple example:
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>
Then in your manifest:
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.NoTitleBar.WithColoredSpinners" >
The text on the outside of all your spinners will now be Green and the text on the dropdowns will be red.
Solution 3
I did this using another simple technique,
copy the simple_spinner_item.xml and simple_spinner_dropdown_item.xml from Android res/layout folder and copy them in your project.
Then modify the following lines
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);
as:
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);
The rest is easy, you can now edit the simple_spinner_item.xml to edit the appearence of one visible item on the spinner widget, and edit the simple_spinner_dropdown_item.xml to change the appearance of drop down list.
For example, my activity layout contains:
<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" />
and my simple_spinner_item.xml now contains:
<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" />
and the simple_spinner_dropdown_item.xml looks like:
<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" />
Solution 4
You can use setOnItemSelectedListener on Spinner object,
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);
}
});
Solution 5
its very simple actually. I was looking for all over you just need to create style and set on spinner
first create your theme in Style.xml
<style name="spinnerTheme" parent="android:Theme">
<item name="android:textColor">@color/gray_dark</item>
</style>
then in your xml where you've set your spinner add this :
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"/>
Enjoy Coding
Related videos on Youtube
Comments
-
Christopher Perry almost 2 years
I'm trying to change the text color of the single item that is displayed in the spinner button after you select an item from the dropdown. I've been perusing the themes.xml and styles.xml in the Android SDK for an hour now, and I can't seem to find where the Spinner is getting the color value from.
To clarify, I'm NOT trying to change the color of a dropdown item, I'm trying to change the color of the spinner's displayed text when there is no dropdown. I guess you could call it the spinner's 'button' text.
-
Ray Tayek about 12 yearsthere is a color and background for the text in a spinner. you can set it in SpinnerAdapter.getView().
-
-
Christopher Perry almost 13 yearsWell, the reason I think it's in a style somewhere is because when I change from the Holo to the Holo.Light theme, the text color on the spinners change from white to black.
-
JoxTraex almost 13 yearsWell you could define your own style and then apply it to the spinner, right?
-
Christopher Perry almost 13 yearsI could, but I have no clue what attribute to override for the text color, hence my question.
-
Christopher Perry almost 13 yearsThat's for the spinner items that go in the dropdown. I need it for the text in the actual spinner.
-
CaseyB almost 13 yearsThat is the actual spinner. I am editing my answer with the full implementation.
-
Christopher Perry almost 13 yearsI don't understand, because this says it's for the spinner items. How does it apply this to the spinner? I see that it actually does work, so I'm going to mark yours as the answer, but I'm really curious how this is actually working because I was looking in the Spinner code to see where the text is being displayed and was at a loss to find it.
-
pengwang almost 13 yearscan you tell me how to do custom triangle on the right of the spnner?
-
Siddhant over 12 yearsFor CaseyB: Can u please be more specific on instructions? Firstly, if i insert the first two style tags in my style.xml file, it asks me for the parent.. Secondly, adding the three style tags given below the above screenshot and then adding adndroid:theme="@style/MooTheme" has no effect WHATSOEVER on my spinner... Thirdly, you haven't mentioned what kind of adapter i must have for my spinner...
-
Christopher Perry over 12 years@pengwang it's part of the nine patch background drawable for Spinner.
-
Diederik over 11 yearsThe above works for me. But only when I do not set the "android:textColor" attribute in the application theme (MooTheme above). Any way of setting the spinner item colour different than the application SpinnerItem colour.
-
Vasil Valchev about 11 yearsthis is most simplest method here :)
-
Stephen Lynx almost 11 yearsWhat if I want to change the style of some spinners and not all spinners in the application?
-
raider33 over 10 yearsNice example. I couldn't get the others to work in my project, but this was easy and worked like a charm.
-
An-droid about 10 yearsThen you only apply the theme to this one spinner
-
David Kibblewhite almost 10 yearsI find I have to check that parent has children first, otherwise there is a NullPointerException raised whenever i change the device's orientation.
-
Gerhard Burger over 9 yearsThis is also a solution that doesn't force the new style globally, like the others do.
-
bkurzius about 9 yearsThis may be the best solution if the color is set only for this one spinner and not globally
-
Roman_D over 7 yearsFor AppCompat theme just remove
android:
like this<item name="spinnerDropDownItemStyle">@style/mySpinnerItemStyle</item>
-
sud007 almost 7 yearsIdeally if someone wants to reutilise their Spinner Adapter, this is the best way to do. Thanks worked that way!
-
vlasentiy almost 7 yearsNPE 'void android.widget.TextView.setTextColor(int)'
-
pollaris over 6 yearsExcellent! I used @android:color/holo_orange_light
-
ymerdrengene about 6 yearsThis also changes the textcolor for both item and dropdown
-
daka over 5 yearsCould you please explain a bit more about what each style is for? what makes the text red?