Search code examples
android-widgetandroidandroid-custom-view

Android - Customizing the Spinner widget Look and Feel


Is it possible to change the color of the radio button in the Android spinner widget. By default it displays the green color for the radio button.

I need to change it to some other color, is it possible, and how?


Solution

  • I know this is an old question now, but here goes...

    You will need to create a custom Theme and apply it to the Activity with your spinner.

    First, you need to create images for the checked/unchecked states of the 'new' radio, you could just pull the given images btn_radio_on.png and btn_radio_off.png from the sdk's res/drawable-* folder(s). Edit them to look how you want (such as changing color or whatever) and save off to your project.

    Next, create a new xml file in your res/values folder, and add the following:

    <resources>
        <style name="CustomSpinnerRadioTheme" parent="@android:style/Theme">
            <item name="android:spinnerDropDownItemStyle">@style/EditedRadio</item>
        </style>
    
        <style name="EditedRadio" parent="@android:style/Widget.DropDownItem.Spinner">
            <item name="android:checkMark">@drawable/edited_radio</item>
        </style>
    </resources>
    

    Then, create another xml file in res/drawable named edited_radio.xml, and it should contain the following:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="false" android:drawable="@drawable/btn_radio_off" />
        <item android:state_checked="true" android:drawable="@drawable/btn_radio_on" />
    </selector>
    

    just be sure to reference your edited images for the checked states. Then you just have to apply the CustomSpinnerRadioTheme to your Activity and run!

    A good resource I found is Applying Styles and Themes especially the additional reference on Android Styles (styles.xml) and Android Themes (themes.xml)