如何获取默认光标的高度可绘制?

时间:2016-08-15 15:48:05

标签: android android-edittext

我知道可以通过将自定义drawable设置为android:textCursorDrawable来更改光标外观,但有没有办法让默认光标的高度可绘制?

4 个答案:

答案 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目录下。

  1. 将形状设置为矩形。
  2. 使用size标签我们可以设置光标的宽度。
  3. 使用实体标签我们可以设置EditText Curosor的颜色。
  4. 要调整光标的高度,我们需要使用填充标记,使用属性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();
}