如何在Java Activity中调用Relay生成的Compose Home组件?
问题
我通过Figma的Relay插件生成了Kotlin编写的Compose组件Home.kt,代码如下:
import androidx.compose.ui.Modifier import androidx.compose.foundation.layout.padding import androidx.compose.ui.unit.Dp fun Home( modifier: Modifier = Modifier, // 其他函数参数 ) { // 在需要的地方使用modifier参数 Box( modifier = modifier.then(padding(16.dp)) ) { // 首页内容 } }
由于无法切换到Kotlin,我需要在Java编写的MainActivity中加载这个视图,但不清楚该传入什么Modifier对象。我的Java代码如下:
import androidx.compose.ui.Modifier; import androidx.compose.foundation.layout.Padding; import androidx.compose.ui.unit.Dp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ComposeView composeView = findViewById(R.id.compose_view); composeView.setContent(() -> { Modifier modifier = Modifier.padding(new Padding(16)); HomeKt.Home( modifier, /// 这里该传什么? /// // 其他函数参数 ); }); }
解决方案
1. 传递默认Modifier
Kotlin中Modifier参数的默认值是Modifier,对应Java里需要通过Modifier.Companion访问。如果不需要额外修饰效果,直接传递这个对象即可:
HomeKt.Home(Modifier.Companion, /* 其他参数 */);
2. 修正Padding的写法
你当前的padding写法有误,Java中正确设置16dp内边距的方式有两种:
- 直接传入Dp值:
Modifier modifier = Modifier.Companion.padding(Dp.Companion.value(16)); - 使用
PaddingValues(需导入androidx.compose.foundation.layout.PaddingValues):Modifier modifier = Modifier.Companion.padding(new PaddingValues(Dp.Companion.value(16)));
3. 完整正确调用示例
import androidx.compose.ui.Modifier; import androidx.compose.foundation.layout.PaddingValues; import androidx.compose.ui.unit.Dp; import androidx.compose.ui.platform.ComposeView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ComposeView composeView = findViewById(R.id.compose_view); composeView.setContent(() -> { // 带16dp内边距的Modifier Modifier modifier = Modifier.Companion.padding(Dp.Companion.value(16)); // 调用Home组件 HomeKt.Home( modifier, /* 其他必填参数 */ ); }); }
注意:如果Home函数还有其他带默认值的参数,Java中需要显式传递所有参数(自动生成的代码通常不带@JvmOverloads注解),需根据实际生成的参数列表补充完整。
内容的提问来源于stack exchange,提问作者Madhup Singh Yadav
相关产品推荐
相关产品推荐

