发现、探索、总结
简介
本篇博客主要讲如何解决某些rom
下EditText
光标无法修改的问题。
现象
我们大都遇到过这种情况,由于为了保证App整体的一致性,Ui 有时候会让你修改某些光标的显示颜色,你或许会说这有什么难的?一句代码搞定,代码如下:
app:textCursorDrawable="@drawable/xx"
结果你运行在模拟器上,喜滋滋的看着自己的成果,但是后面测试仍然找到了你,说你仍没有修改,这时候的你一脸懵逼。你要去找测试理论,测试拿出了他的华为手机 …,你或许会感叹,这很华为…
对于某些国产rom
,类似华为、小米、魅族它们对系统源码进行了修改,某些情况下会导致系统的api
无效,但经过实践发现,修改光标最终修改的只是mCursorDrawableRes
对应的值,即使在国产rom
也是如此,所以有了后面的解决办法。
解决办法
通过上面的现象和实践我们知道只需要能够修改mCursorDrawableRes
对应的值就可以保证兼容这些系统,如何去修改呢?
具体思路如下: 利用反射获取对应的成员变量,然后将自己需要传入的值进行设置
具体步骤:
继承
EditText
声明自定义的属性,用于接收自定义的值
利用反射将用户定义的值进行设置
简单方式
你或许会说我难不成还要自己去自定义吗?而且感觉每次都这样写好麻烦啊! 好吧,程序员怎么可以这么low,使用下面的方式即可轻松上车… 滴滴.
- 导入该库
Step 1. Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
compile 'com.github.guohaiyang1992:GeneralEditText:0.2'
}
使用该库的控件
com.ghy.ui.GeneralEditText
使用
app:textCursorDrawable="@drawable/xx"
如果你想看具体的实现,请跳转至github
总结
至此已经完成了修改光标的学习。遇到问题多思考。