gpt4 book ai didi

java - Android 以编程方式设置textcursordrawable,无需反射方法

转载 作者:行者123 更新时间:2023-12-01 06:05:29 25 4
gpt4 key购买 nike

我想根据所选的应用主题以编程方式更改项目中使用的所有编辑文本的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com