How to change EditText cursor height?

android, android-edittext

Solution

I had to dig far into the Android source to find the answer to this, but you essentially have to use padding on a custom shape drawable.

note: only works on API 12 and greater due to support for `textCursorDrawable`

Use positive top padding to move the top of your cursor higher

User positive bottom padding to move the bottom of your cursor lower

I usually end up using negative bottom padding to shorten the cursor because the it drops too low below baseline when you increase the line height with `lineSpacingMultiplier` or `lineSpacingExtra`.

example cursor_red.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <size 
        android:width="2dip" />
    <solid
        android:color="@color/red" />
    <padding 
        android:top="2sp"
        android:bottom="-11sp" />
</shape>

This will make a 2dip wide red cursor that is

- 2sp higher (longer) at the top

- 11sp higher (shorter) on the bottom.

Then in your edittext, just specify `android:textCursorDrawable`:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textCursorDrawable="@drawable/cursor_red" />

Relevant Android source code inside Editor.java from which I figured out the solution:

private void updateCursorPosition(int cursorIndex, int top, int bottom, float horizontal) {
    ...

    mCursorDrawable[cursorIndex].getPadding(mTempRect);

    ...

    mCursorDrawable[cursorIndex].setBounds(left, top - mTempRect.top, left + width,
            bottom + mTempRect.bottom);
}

Problem

I want to change the `EditText` cursor height, does anyone know how?

Original source