Android 触摸事件被“阻止”;“空位”;在可组合列中

Android 触摸事件被“阻止”;“空位”;在可组合列中,android,android-jetpack,android-jetpack-compose,Android,Android Jetpack,Android Jetpack Compose,我正在尝试在现有应用程序中使用。通过以下将Compose与现有应用程序集成的过程,我在现有xml布局中使用了ComposeView: 我正在SurfaceView上渲染compose视图,该视图用于显示3D图形 我使用的可组合函数与此类似: @Composable fun MyComposable(){ Col(){ 卡片(修改器宽度(100.dp){ 文本(“第1行”) } 卡片(修改器宽度(400.dp){ 文本(“第2行”) } } } 问题是:如果触摸事件发生在“空白区域”内,则不

我正在尝试在现有应用程序中使用。通过以下将Compose与现有应用程序集成的过程,我在现有xml布局中使用了
ComposeView


我正在SurfaceView上渲染compose视图,该视图用于显示3D图形

我使用的可组合函数与此类似:

@Composable
fun MyComposable(){
Col(){
卡片(修改器宽度(100.dp){
文本(“第1行”)
}
卡片(修改器宽度(400.dp){
文本(“第2行”)
}
}
}

问题是:如果触摸事件发生在“空白区域”内,则不会捕获SurfaceView中的触摸事件在
Col
列中,即
Row2
上方的
Row1
右侧。值得一提的是,触摸
Row2
右侧效果良好。触摸事件似乎不会通过ComposableView跨越的矩形传播,即使是“空”的部分.

解释:您可以单击列的侧面,因为视图比表面小。由于列的宽度与可组合性要求相同,“空”空间由列填充。因此,最宽的可组合性为400dp(第2行),即视图的宽度

你可以自己把它转发/冒泡。 如果需要单击的确切位置,可以使用提供的Modifier.rawPressStartTestureFilter偏移量,或者您可以找到更合适的选项

classmyfragment:Fragment(){
私有lateinit变量绑定:ExampleBinding
覆盖创建视图(充气机:布局充气机,容器:ViewGroup?,savedInstanceState:Bundle?):视图{
绑定=示例绑定。充气(充气机、容器、假)
返回binding.root
}
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
binding.myComposable.setContent{
MyComposable(bubbleClick={handleClickForSurface()})
}
binding.rajwaliSurface.setOnClickListener{
handleClickForSurface()的名称
}
}
私人娱乐手杖舔表面(){
//处理点击
}
伴星{
@组合的
趣味可组合(泡泡舔:()->单位){
列(修饰符。可单击(onClick=bubbleClick)){
卡片(修改器宽度(100.dp)){
文本(“第1行”)
}
卡片(修改器宽度(400.dp)){
文本(“第2行”)
}
}
}
}
}
编辑:添加解释