解决某些机型中EditText无法修改光标以及光标不展示问题
产生原因:
1.某些机型光标默认是白色 当EditText是白色背景的时候会导致光标展示不出来
2.光标设置了默认不展示也会导致光标展示不出来
3.某些机型修改了系统方法引发的光标展示不出来
解决方案:
1.1 textCursorDrawable :设置光标资源文件的方法(注意这是个drawable文件夹下的一个资源文件)
<!-- Reference to a drawable that will be drawn under the insertion cursor. -->
<!-- 翻译:对将在插入光标下绘制的可绘制图形的引用-->
<attr name="textCursorDrawable" format="reference" />
设置自定义光标文件
1.2 资源文件 edit_cursor.xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#21BC23" />
<size android:width="1dp" />
</shape>
2.cursorVisible :设置光标默认展示不展示的方法
<!-- Makes the cursor visible (the default) or invisible. -->
<!-- 翻译:使光标可见(默认设置)或不可见。. -->
<attr name="cursorVisible" format="boolean" />
image.png
3.有些三方尝试修改了底层代码导致获取不到数据可尝试反射回去然后再设置尝试一下
public class CustomEditText extends EditText {
public GeneralEditText(Context context) {
super(context);
}
public CustomEditText (Context context, AttributeSet attrs) {
super(context, attrs);
modifyCursorDrawable(context, attrs);
}
public CustomEditText (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.CustomEditText);
int drawable = a.getResourceId(R.styleable.CustomEditText_textCursorDrawable, 0);
if (drawable != 0) {
try {
Field setCursor = TextView.class.getDeclaredField("mCursorDrawableRes");
setCursor.setAccessible(true);
setCursor.set(this, drawable);
} catch (Exception e) {
e.printStackTrace();
}
}
a.recycle();
}
}
3.2 attrs.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomEditText">
<attr name="textCursorDrawable" format="reference" />
</declare-styleable>
</resources>
总结
简单总结了一下项目中兼容问题出现的EditText光标出现的问题特此记录一下
网友评论