Shadow icon indicating copy to clipboard operation
Shadow copied to clipboard

约束布局失效

Open chenlin139 opened this issue 3 years ago • 2 comments

插件中使用了宿主的view,view中有constraintlayout.宿主中view的约束效果失效,如图1 如果在白名单加上约束布局的包名,就会出现2图插件view的约束效果失效 图1 image 图2 image

https://github.com/lidongdong139/Shadow/tree/constraintlayout

chenlin139 avatar Jun 14 '22 08:06 chenlin139

大概看了一下你的代码,无关的修改有点多。比如为什么跑去改slidingmenu,又为什么又改了test又改sample。

但我大概是能猜到原因。看起来MyGameView和ConstraintLayout都是宿主中的代码。然后你在插件里的xml中添加了MyGameView。这是不行的。因为ConstraintLayout带有自定义资源,比如app:layout_constraintTop_toBottomOf。 所以要构造这种宿主里的View需要用宿主的Context来构造。

View的Context,也就是它的上下文,决定了它该从哪里获取资源,适配什么样的设备环境。插件的宿主的Context主要区别就在于它们的资源来自于不同的apk。xml在inflate时是使用Inflater绑定的context的,所以xml中的view都是同一个context构造的。你可以尝试用代码指定宿主的context构造这个MyGameView,然后再把它添加到xml Inflater出的ViewGroup中。

shifujun avatar Jun 15 '22 07:06 shifujun

也就是说插件想用宿主里的view,只能通过在宿主中定义接口的方式,用宿主的context创建view,然后由插件通过这个接口获取这个view,再动态添加到插件的viewgroup中

chenlin139 avatar Jun 15 '22 08:06 chenlin139