对于editable = false,Android 4.0 EditText游标始终不可见的问题,可以通过以下方式解决:
a. 使用自定义的样式:可以通过在res/values/styles.xml文件中定义一个新的样式,并将android:textCursorDrawable属性设置为一个可见的游标资源。然后,在EditText的布局文件中将该样式应用到EditText上。
b. 使用反射:通过反射的方式来修改EditText的mCursorDrawableRes属性,将其设置为一个可见的游标资源。具体实现代码如下:
import java.lang.reflect.Field;
public class EditTextUtils {
public static void setCursorVisible(EditText editText, boolean visible) {
try {
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
int cursorDrawableRes = f.getInt(editText);
Field f1 = TextView.class.getDeclaredField("mEditor");
f1.setAccessible(true);
Object editor = f1.get(editText);
Class<?> clazz = editor.getClass();
Field f2 = clazz.getDeclaredField("mCursorDrawable");
f2.setAccessible(true);
Drawable[] drawables = new Drawable[2];
drawables[0] = editText.getContext().getResources().getDrawable(cursorDrawableRes);
drawables[1] = editText.getContext().getResources().getDrawable(cursorDrawableRes);
if (!visible) {
drawables[0].setAlpha(0);
drawables[1].setAlpha(0);
}
f2.set(editor, drawables);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后,在需要使用EditText的地方,调用setCursorVisible方法并传入相应的参数即可控制游标的可见性。
领取专属 10元无门槛券
手把手带您无忧上云