以前一直没有注意过 EditText 光标的问题,今天有人提了优化用户体验建议。自己就着手优化了下,不是什么大问题,但是还是有一些小坑,以此记录,避免下次在踩坑。
全局修改光标颜色
全局光标颜色修改很容易,找到 AndroidManifest文件,查看 "android:theme="@style/AppTheme",查看 AppTheme的属性,其中 <item name="colorAccent">@color/colorAccent</item>就是设置全局的获取焦点后的光标颜色,可以修改这里变成我们需求的色值。XML设置的代码,跟往常一样即可。
PS:这个是全局修改,修改了这个属性的颜色值,项目中用到此颜色值的相关组件颜色都会产生变化,比如状态栏。建议慎重。
修改单个EditText光标颜色
在 Android3.2 或者更高版本上面,EditText 有一个属性:android:textCursorDrawable,可以按照如下的方式进行设置。
创建光标颜色的 drawable 资源文件
需要创建光标颜色的 drawable 资源文件。举例如下:
1 | <?xml version="1.0" encoding="utf-8"?> |
使用android:textCursorDrawable=""属性。
XML 布局中,使用android:textCursorDrawable="@drawable/color_cursor",这个属性是用来控制光标颜色的。完整代码:
1 | <EditText |
设置光标颜色与文本颜色一致
很简单,将android:textCursorDrawable的值设置为"@null" ,"@null" 作用是让光标颜色和文本颜色保持一致。
光标显示与隐藏
设置android:cursorVisible即可
1 | android:cursorVisible="true" 显示光标 |
设置光标位置
EditText 如果有默认输入,光标获取焦点后,默认插入光标是在第一个位置的。用户体验不是很好,为了方便用户使用,需要把光标移动到最后位置,可以使用 setSelection 方法完成。如下例子:
1 | EditText et = ... |
取消EditText下划线
可以通过背景属性设置,取消下划线。android:background="@null",这样操作会使的下划线消失的同时,默认边距也不存在。需要重新处理边距问题。
自定义style样式修改下划线光标颜色
使用android:theme="@style/MyEditText"属性设置自定义主题。如下,需要先创建自己的style样式,然后使用属性设置。
1 | <!--colorControlNormal 为没有获取焦点时候下划线的颜色--> |