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