You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 05:25:02