EditText自定义光标的问题

xiaoxiao2021-02-28  42

自定义光标按说很简单,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

转载请注明原文地址: https://www.6miu.com/read-2150291.html

最新回复(0)