Change the color of the cursor of an EditText in A

2019-04-20 02:29发布

问题:

I have to have an EditText in my application with a white background. I did this in my theme.xml file

<style name="myEditText" parent="@android:style/Widget.EditText">
  <item name="android:background">#ffffffff</item>
  <item name="android:textColor">#ff000000</item>
</style>

The problem now is that the cursor is still white and therefore not visible. I did some googling and found this question here on StackOverflow: Set EditText cursor color

The way it's done there is the android:textCursorDrawable key. But this key does seem to be only available with a 3.2 target. But our clients wants a 3.0 target and I could not find any other solution...

Is there any way i can change the color of the blinking cursor with 3.0 as the target?

Thanks for helping :)

回答1:

I found the answer :)

I've set the Theme's editText style to:

<item name="android:editTextStyle">@style/myEditText</item>

Then I've used the following drawable to set the cursor:

<style name="myEditText" parent="@android:style/Widget.Holo.Light.EditText"> 
<item name="android:background">@android:drawable/editbox_background_normal</item> 
<item name="android:textCursorDrawable">@android:drawable/my_cursor_drawable</item> 
<item name="android:height">40sp</item> </style>

android:textCursorDrawable is the key here.

And also refer this one Vertical line using XML drawable



回答2:

I was trying to change the cursor color in my app which targeted API 8. I've found out that TextView uses textColor property as the cursor color. Here's a part of onDraw() defined in TextView API 8:

    int color = mCurTextColor;

    if (mLayout == null) {
        assumeLayout();
    }

    Layout layout = mLayout;
    int cursorcolor = color;

The cursorcolor is then used to constract an android.graphics.Path object representing the color.

If you need to change this behaviour, you're up to quite a task, you'll have to implement your own TextView.