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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值