我正在尝试创建一个自定义android UI组件,以公开一些android native View道具(nextFocusRight / nextFocusDown / Up / Left等)。现在,我只是扩展ReactViewManager
并公开我需要的道具。
为了使它起作用,我想在react native js组件上设置nativeID
,然后能够在native View上找到对其的引用。我正在尝试使用ReactFindViewUtil.findView
助手来做到这一点,但无法使其正常工作。
这是到目前为止的结果:
class ReactViewManagerCustom : ReactViewManager() {
var mCurrentActivity: Activity? = null
override fun getName(): String = "ReactViewManagerCustom"
override fun createViewInstance(context: ThemedReactContext): ReactViewGroup {
mCurrentActivity = context.currentActivity
return ReactViewGroup(context)
}
@ReactProp(name = "nextFocusRight")
fun setNextFocusRight(view: View, @Nullable nativeId: String) {
var viewGroup = mCurrentActivity?.window?.decorView?.findViewById<ViewGroup>(android.R.id.content)
var targetView = ReactFindViewUtil.findView(viewGroup, nativeId)
targetView?.let {
view.nextFocusRightId = it.id
}
}
}
问题在于传递给viewGroup
调用的findView
在层次结构中的任何地方都不包含预期的View。 viewGroup是一个FrameLayout
,其中包含一个孩子ReactRootView
,但没有孩子。
如何使用nativeID
在层次结构中的任何位置查找视图?有没有更好的方法来解决这个问题?我是android的新手,所以我可能会以错误的方式看待这个问题,因此感谢您的帮助。