作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想根据所选的应用主题以编程方式更改项目中使用的所有编辑文本的 EditText 颜色和宽度。
因此我无法使用 XML 来完成此操作,需要一个编程解决方案。
所以我想创建一个自定义函数来设置它
void setEditTextColorDrawable(int ClrVar)
{
// Code Todo
}
我尝试了
中建议的所有方法 set textCursorDrawable programmatically
问题是,getDeclaredField("mCursorDrawableRes") 在 API22 以上不可用。
那么我该如何为所有 API(甚至高于 22)执行此操作
try {
// https://github.com/android/platform_frameworks_base/blob/kitkat-release/core/java/android/widget/TextView.java#L562-564
Field f = TextView.class.getDeclaredField("mCursorDrawableRes");
f.setAccessible(true);
f.set(yourEditText, R.drawable.cursor);
} catch (Exception ignored)
{
log.d("TAG", "This is depricated")
}
Output : "This is depricated"
最佳答案
public static void setCursorDrawableColor(EditText editText, int color) {
try {
Field fCursorDrawableRes = TextView.class.getDeclaredField("mCursorDrawableRes");
fCursorDrawableRes.setAccessible(true);
int mCursorDrawableRes = fCursorDrawableRes.getInt(editText);
Field fEditor = TextView.class.getDeclaredField("mEditor");
fEditor.setAccessible(true);
Object editor = fEditor.get(editText);
Class<?> clazz = editor.getClass();
Field fCursorDrawable = clazz.getDeclaredField("mCursorDrawable");
fCursorDrawable.setAccessible(true);
Drawable[] drawables = new Drawable[2];
drawables[0] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
drawables[1] = editText.getContext().getResources().getDrawable(mCursorDrawableRes);
drawables[0].setColorFilter(color, PorterDuff.Mode.SRC_IN);
drawables[1].setColorFilter(color, PorterDuff.Mode.SRC_IN);
fCursorDrawable.set(editor, drawables);
} catch (Throwable ignored) {
ignored.getMessage();
}
}
如果你想改变水滴颜色,可以使用以下代码: https://gist.github.com/jaredrummler/2317620559d10ac39b8218a1152ec9d4
关于java - Android 以编程方式设置textcursordrawable,无需反射方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45766185/
我有一个白色的 EditText,在 Android 3.1 及更高版本中,光标不显示(因为它也是白色的)。有关信息,我使用 android:background="@android:drawable
如果我在 XML 中添加 EditText 我可以设置 textCursorDrawable="@null": 现在我用 Java 绘制一个 EditText。我想设置 android:textCu
我是一名优秀的程序员,十分优秀!