So I changed the style of the Holo Theme with the Holo Colors Generator and Action Bar Style Generator to my own color. But when I select text inside an edit text, the "markers" at the selected positions are still blue. How can I change it?
问题:
回答1:
The worst part here was to find the "name" for this item and how it is called inside the theme. So I looked through every drawable in the android SDK folder and finally found the drawables named "text_select_handle_middle", "text_select_handle_left" and "text_select_handle_right".
So the solution is simple: Add these drawables with customized design/color to your drawable folder and add them to your theme style definition like:
<style name="MyCustomTheme" parent="@style/MyNotSoCustomTheme">
<item name="android:textSelectHandle">@drawable/text_select_handle_middle</item>
<item name="android:textSelectHandleLeft">@drawable/text_select_handle_left</item>
<item name="android:textSelectHandleRight">@drawable/text_select_handle_right</item>
</style>
回答2:
how to do it from code?
try {
final Field fEditor = TextView.class.getDeclaredField("mEditor");
fEditor.setAccessible(true);
final Object editor = fEditor.get(editText);
final Field fSelectHandleLeft = editor.getClass().getDeclaredField("mSelectHandleLeft");
final Field fSelectHandleRight =
editor.getClass().getDeclaredField("mSelectHandleRight");
final Field fSelectHandleCenter =
editor.getClass().getDeclaredField("mSelectHandleCenter");
fSelectHandleLeft.setAccessible(true);
fSelectHandleRight.setAccessible(true);
fSelectHandleCenter.setAccessible(true);
final Resources res = context.getResources();
fSelectHandleLeft.set(editor, res.getDrawable(R.drawable.text_select_handle_left));
fSelectHandleRight.set(editor, res.getDrawable(R.drawable.text_select_handle_right));
fSelectHandleCenter.set(editor, res.getDrawable(R.drawable.text_select_handle_middle));
} catch (final Exception ignored) {
}
回答3:
I recognize this is really late, but if all you want to do is change the color of the handle, you just need to add the following to your styles.xml file.
<style name="ColoredHandleTheme">
<item name="colorControlActivated">@color/colorYouWant</item>
</style>
And then just set the theme on whatever activity is holding the EditText
which you want to affect.
Or if you want to set it app-wide, you can do the following:
<style name="ColoredHandleThemeForWholeApp">
<item name="colorAccent">@color/colorYouWant</item>
</style>
And set that theme for the whole app.
Problem solved!
回答4:
In order to change the color of select handles, you have to override the activated color in your app theme:
<style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:colorControlActivated">@color/customActivatedColor</item>
</style>
回答5:
You can see these attributes in http://androiddrawables.com/Other.html.
Change your values/styles.xml, for instance:
<style name="AppTheme.Cursor" parent="AppTheme">
<item name="colorAccent">@color/cursor</item>
</style>
where @color/cursor is added in values/color.xml. After that apply the style to the activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme_Cursor);
...
Visit How to change EditText pointer color (not cursor) for other solutions.