无法通过反射找到Editor类的属性

时间:2018-11-14 16:32:34

标签: android debugging reflection colors cursor

我使用的是带有Android API 28 x86的仿真器,并且我的项目目标/编译SDK版本是28。考虑到这一点,我可以解决真正的问题。

我试图在运行时使用反射更改EditText光标的颜色。查看SDK 28文件,我发现了要更改的字段的名称,它是“ mDrawableForCursor”,该字段存在于Editor类中。我不知道为什么,但是这个类不能被引用到我的项目中,但这不是问题,我也可以通过反射来获得它的引用。因此,我编写了以下代码

    // Get the cursor resource id
    Field field = TextView.class.getDeclaredField("mCursorDrawableRes");
    field.setAccessible(true);
    int drawableResId = field.getInt(this._inputEditText);
    field.setAccessible(false);

    // Get the editor
    field = TextView.class.getDeclaredField("mEditor");
    field.setAccessible(true);
    Object editor = field.get(this._inputEditText);
    field.setAccessible(false);

    // Get the drawable and set a color filter
    Drawable cursorPipe = ContextCompat.getDrawable(getContext(), drawableResId);
    cursorPipe.setColorFilter(color, PorterDuff.Mode.SRC_IN);
    Drawable[] drawables = {cursorPipe, cursorPipe};

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        field = editor.getClass().getDeclaredField("mDrawableForCursor"); // error
    } else {
        field = editor.getClass().getDeclaredField("mCursorDrawable");
    }

现在,奇怪的事情开始发生...我在Editor对象上放置了一个断点,并发现其中存在该字段(最后一个),但是当我的代码尝试通过getDeclaredField()方法获取该字段时,抛出异常

  

Landroid / widget / Editor类中没有字段mDrawableForCursor; (“ android.widget.Editor”的声明出现在/system/framework/framework.jar!classes2.dex中)

editor debugging

出于好奇,我得到了这个Editor类的所有已声明字段,并且似乎只有八个可用字段,现在我不知道代码中正在发生什么。 enter image description here

0 个答案:

没有答案