julley 发表于 2017-7-10 07:52:03

华为手机Edittext光标(cursor)颜色修改

  华为手机的emui系统经常让人发出“可以可以,这很华为”的感叹
  这两天在edittext部分也发生了这样的事情
  正常edittext光标的颜色和宽度都说可以修改的,只需要通过xml中的 textCursorDrawable 属性就可以实现
  但是到了华为手机上就直接会被系统默认一种很丑的光标风格覆盖
  正常的方法都不管用,于是翻源码看到edittext的父类textview中的“mCursorDrawableRes”域是负责从xml文件中获取你通过 textCursorDrawable 设置的光标drawable
  于是尝试简单粗暴地使用反射的方式对其进行修改,如下:



public class HWEditText extends EditText {
public HWEditText(Context context) {
this(context,null);
}
public HWEditText(Context context, AttributeSet attrs) {
super(context, attrs);
modifyCursorDrawable(context,attrs);
}
public HWEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
modifyCursorDrawable(context,attrs);
}
private void modifyCursorDrawable(Context context, AttributeSet attrs){
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HWEditText);
int drawable = a.getResourceId(R.styleable.HWEditText_textCursorDrawable,0);
if(drawable != 0) {
try {
Field setCursor = TextView.class.getDeclaredField("mCursorDrawableRes");
setCursor.setAccessible(true);
setCursor.set(this, drawable);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
a.recycle();
}
}
  run一下发现此方法奏效
  之后把这个类改成了适配增强类,同时给了一个自定义属性,可以在xml定义一个同名自定义属性对cursor进行修改,另外再把其他手机适配的几个小问题加进去了
页: [1]
查看完整版本: 华为手机Edittext光标(cursor)颜色修改