使用 Kotlin 1.5.20 访问 Android11 中 TextView 的私有字段?
Accessing private field of TextView in Android 11 using Kotlin 1.5.20?
看到了,但是22票的已接受答案似乎无法编译。答案是
val hello = Hello()
val f = Hello::class.memberProperties.find { it.name == "world" }
f?.let {
it.isAccessible = true
val w = it.get(hello) as World
println(w.foo())
}
,但是class
没有memberProperties
。我能找到的最接近的是 members
,但似乎 return 不是正确的类型。如何获取私有字段“mEditor”?
val f = TextView::class.members.find {it.name == "mEditor"};
f?.let{
it.isAccessible=true;
val w = it.get(text2)
}
Unresolved reference: isAccessible
TextView.java
@RemoteView
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
....
/**
* {@link EditText} specific data, created on demand when one of the Editor fields is used.
* See {@link #createEditorIfNeeded()}.
*/
@UnsupportedAppUsage
private Editor mEditor;
您可以像 java 一样使用 getDeclaredField
。
val f = TextView::class.java.getDeclaredField("mEditor")
f?.let {
it.isAccessible = true
Log.d("TYPE:",f.genericType.toString())
}
日志输出:
TYPE:: class android.widget.Editor
看到了
val hello = Hello()
val f = Hello::class.memberProperties.find { it.name == "world" }
f?.let {
it.isAccessible = true
val w = it.get(hello) as World
println(w.foo())
}
,但是class
没有memberProperties
。我能找到的最接近的是 members
,但似乎 return 不是正确的类型。如何获取私有字段“mEditor”?
val f = TextView::class.members.find {it.name == "mEditor"};
f?.let{
it.isAccessible=true;
val w = it.get(text2)
}
Unresolved reference: isAccessible
TextView.java
@RemoteView
public class TextView extends View implements ViewTreeObserver.OnPreDrawListener {
....
/**
* {@link EditText} specific data, created on demand when one of the Editor fields is used.
* See {@link #createEditorIfNeeded()}.
*/
@UnsupportedAppUsage
private Editor mEditor;
您可以像 java 一样使用 getDeclaredField
。
val f = TextView::class.java.getDeclaredField("mEditor")
f?.let {
it.isAccessible = true
Log.d("TYPE:",f.genericType.toString())
}
日志输出:
TYPE:: class android.widget.Editor