Reputation: 12638
I'm not sure that this is possible, perhaps someone can set me straight. I have an EditText View in an android application that has white text on a blue background. When the text is selected (via a long press and the edit dialog), I'd like have the highlight be white and change the text color to be black. Annoyingly though there does not seem to be a way to set the color of the text on highlight. You can set the highlight color using textColorHighlight, but not the text color, so setting a white highlight with white text results in a big white block.
It seems like it should be something trivial you can do declaratively in the xml, but though I've tried many combinations of styles and colors, I've not been able to change the color.
Checking other standard applications it seems that the text color never seems to change so I'm thinking this is something that's not easily done. I'd rather not have to subclass the EditText if at all possible just to something so simple. Am I missing something? Can this be done in the view xml?
Upvotes: 11
Views: 18744
Reputation: 947
Try:<item name="android:textColorHighlight">your_color</item>
in the style that you as your theme. For e.g.
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">your_color1</item>
<item name="colorPrimaryDark">your_color2</item>
<item name="colorAccent">your_color3</item>
<item name="android:textColor">your_color4/item>
<item name="android:textColorHighlight">your_color</item>
</style>
then use this style as the theme for your activity in the manifest file. For e.g.-
<activity
android:name=".youractivity"
android:label=""
android:theme="@style/AppTheme.NoActionBar"
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Upvotes: 2
Reputation: 615
Object mSelectionForegroundColorSpan;
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
if(mSelectionForegroundColorSpan == null){
mSelectionForegroundColorSpan = new ForegroundColorSpan(Color.GREEN);
}else{
getText().removeSpan(mSelectionForegroundColorSpan);
}
if(selStart > selEnd){
int swap = selStart;
selStart = selEnd;
selEnd = swap;
}
getText().setSpan(mSelectionForegroundColorSpan, selStart, selEnd, Spanned.SPAN_INTERMEDIATE);
}
Override the onSelectionChanged method of TextView, get the text and set a ForegroundColorSpan
Upvotes: 0
Reputation: 73
Try with textColorHighlight - "Color of highlighted text." http://developer.android.com/reference/android/R.attr.html#textColorHighlight
Upvotes: 0
Reputation: 11191
As referred to by this SO post, you should be using a selector to change text colors like so:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pressed State -->
<item android:state_pressed="true"
android:color="#FFFFFF" />
<!-- Focused State -->
<item android:state_focused="true"
android:color="#FFFFFF" />
<!-- Default State -->
<item android:color="#000000" />
</selector>
And then set your textColor property to @drawable/selector_name
Upvotes: 0