How to change EditText cursor height?

匿名 (未验证) 提交于 2019-12-03 02:26:02

问题:

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

回答1:

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); } 


回答2:

change the editText style to a custom style

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

then use a drawable to set the cursor:

<style name="myEditText" parent="@android:parentdetails"> <item name="android:textCursorDrawable">@android:drawable/my_cursor_drawable</item> <item name="android:height">Height here e.g. 50sp</item>  </style> 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!