EditText自定义光标的问题

自定义光标按说很简单,xml中定义android:textCursorDrawable

不过我自定义了一个Shape后发现与预期不符,不知原因在哪里,不想多追究了,直接拿原生的改吧。

<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:inset="2dp"
    >
    <shape
        android:shape="rectangle">
        <size
            android:height="2dp"
            android:width="2dp"
            />
        <padding
            android:top="0sp"
            android:bottom="-10sp" />
        <solid
            android:color="@color/cursor_color" />
    </shape>
</inset>

这里有几个注意点:

1.原生使用的是inset,我们也照猫画虎吧

2.行间距对光标的影响,光标是会填充整个行的,所以指定的高度并无鸟用,这样如果定义行间距的话,就会出现光标会填充行间距的空间,UI上比较丑,这时定义bottom padding就十分重要了,定义和行间距匹配的负数吧。

3.伟大的魅蓝手机在系统层已经解决了第二个问题,如果已经采用第二个问题的解决方法,就会发现光标变矮了,所以针对它要做适配大哭


设定bottom padding后最大的问题是如果设置了行间距,那么尾行(单行也算)的光标会明显缩短,这是尾行无行间距导致的。

其实通过分析源码可以得知framework代码是通过setBounds设置Drawable高度的,那么自定义Drawable,然后Override

setBound即可很轻松的实现图片高度不变。但是TextView除了通过xml设置光标外并无其他设置的接口,所以要通过反射来设置我们自定义的Drawable了。已有开源项目实现了这个需求,见LineHeightEditText

猜你喜欢

转载自blog.csdn.net/firedancer0089/article/details/80081696