18

I'm creating an application which uses Android 4.0. I'm wondering if it is possible to change the text color of the text in a switch.

I've tried setting the text color, but it doesn't work.

Any ideas?

Thanks in advance!

Robin.v
  • 719
  • 3
  • 8
  • 16
  • There's no specific code, its just a switch in the layout, which is found by ID. And in the code i set the switch.setTextColor(Color.WHITE); – Robin.v Oct 03 '12 at 10:55

3 Answers3

66

You must use android:switchTextAppearance attribute, eg:

android:switchTextAppearance="@style/SwitchTextAppearance"

and in styles:

<style name="SwitchTextAppearance" parent="@android:style/TextAppearance.Holo.Small">
    <item name="android:textColor">@color/my_switch_color</item>
</style>

you can also do it in code, also using above styles:

mySwitch.setSwitchTextAppearance(getActivity(), R.style.SwitchTextAppearance);

...and as for setTextColor and Switch - this color will be used if your SwitchTextAppearance style doesn't provide a textColor

you can check it in Switch source code in setSwitchTextAppearance:

    ColorStateList colors;
    int ts;

    colors = appearance.getColorStateList(com.android.internal.R.styleable.
            TextAppearance_textColor);
    if (colors != null) {
        mTextColors = colors;
    } else {
        // If no color set in TextAppearance, default to the view's textColor
        mTextColors = getTextColors();
    }

    ts = appearance.getDimensionPixelSize(com.android.internal.R.styleable.
            TextAppearance_textSize, 0);
    if (ts != 0) {
        if (ts != mTextPaint.getTextSize()) {
            mTextPaint.setTextSize(ts);
            requestLayout();
        }
    }
imbryk
  • 1,778
  • 1
  • 16
  • 19
1

I think you have to look at the theme which you are using for your application. Because the color of the switch is the responsibility of the theme, afaik. So I would suggest you have a look on how you can change the settings of a theme. Or you could create a custom theme with the new colors.

ndsmyter
  • 6,535
  • 3
  • 22
  • 37
0

TextView.setTextColor() takes an int representing the color (eg. 0xFFF5DC49) not the resource id from the xml file. In an activity, you can do something like:

textView1.setTextColor(getResources().getColor(R.color.mycolor))

outside of an activity you'll need a Context eg.

textView1.setTextColor(context.getResources().getColor(R.color.mycolor))

For more refer this

harshit
  • 3,788
  • 3
  • 31
  • 54
  • 1
    Hello, first thanks for your response! This isn't the answer that I'm looking for, i got it working for textviews and editTexts. But I need it for a switch and I'm not sure how.. – Robin.v Oct 03 '12 at 10:59
  • 1
    Actually `setTextColor` is not used for `Switch`, unless the style provided for `android:switchTextAppearance` doesn't define a textColor – imbryk Mar 29 '13 at 09:30