我知道可以通过将自定义drawable设置为android:textCursorDrawable
来更改光标外观,但有没有办法让默认光标的高度可绘制?
答案 0 :(得分:1)
在代码中引用textCursorDrawable,例如:
Drawable cursor = getResources().getDrawable(android.R.drawable.your_drawable);
然后,一旦你有了drawable使用Drawable Wrapper来包装你的drawable并使用适当的方法来获得高度: 像这样:
DrawableWrapper with_height_cursor = new DrawableWrapper(cursor);
int height = with_height_cursor.getIntrinsicHeight();
希望这有帮助!
答案 1 :(得分:1)
这是未经测试的。但这应该有用。
public int getHeightofCursor(TextView textView) {
Paint.FontMetricsInt fm = textView.getPaint().getFontMetricsInt();
int cursorHeight = fm.bottom - fm.top;
return cursorHeight;
}
答案 2 :(得分:0)
要更改EditText Cursor的默认高度,我们需要创建一个带有shape标签的可绘制xml文件。
创建editext_cursor.xml并将其放在res-> drawable目录下。
要调整光标的高度,我们需要使用填充标记,使用属性android:bottom和android:top我们可以修剪或增加光标高度。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<size android:width="1dip" />
<solid android:color="#010101" />
<padding
android:bottom="-11sp"
android:top="-2sp" />
<stroke android:color="#e71839" />
</shape>
现在,在您的布局文件中,将android:textCursorDrawable =“@ drawable / editext_cursor”添加到activity.xml文件中的EditText标记。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ebm="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f2f2"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<EditText
android:id="@+id/view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"
android:textCursorDrawable="@drawable/editext_cursor"
android:textSize="20sp">
</EditText>
</RelativeLayout>
答案 3 :(得分:0)
使用反射我可以找到Cursor的高度。它适用于三星edge s7。如果制造商没有对mCursorDrawableRes进行任何更改,它可能适用于所有设备。
public int getHeightofCursor(Context context, EditText editText) throws Exception {
Field cursor = TextView.class.getDeclaredField("mCursorDrawableRes");
cursor.setAccessible(true);
int resid = cursor.getInt(editText);
Drawable cursorDrawable = context.getResources().getDrawable(resid);
return cursorDrawable.getIntrinsicHeight();
}