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?