可以在 Java 编写的 Activity 和 Activity 中使用/布局组合视图吗?

时间:2021-05-06 18:20:21

标签: java android kotlin android-jetpack-compose

Google 给出了以下示例,说明如何在 XML 中使用 ComposeView 并在片段中对其进行扩充。

class = "list-group"

我有一个用 Java 而不是 kotlin 编写的活动。是否可以使用 Java 活动中的 setContent?如果是这样,我正在为语法而苦苦挣扎。

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。

首先你应该创建一个 AbstractComposeView 的子类:

class MyComposeView
@JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
    AbstractComposeView(context, attrs) {
    @Composable
    override fun Content() {
        YourComposableFunction()
    }
}

然后将此视图设置为活动内容...

public class MyJavaActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new MyComposeView(this));
    }
}

您还可以在任何布局文件中声明您的视图...

<com.example.MyComposeView
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

然后像往常一样调用 setContentView(R.layout.your_layout_file)

答案 1 :(得分:1)

您可以简单地包装一个 kotlin 函数并传递活动实例并设置内容,而不是创建 AbstractComposeView 。 例如:

object ComposeContent {
    fun setContentFromJavaActivity(activity: AppCompatActivity) {
        activity.setContent {
            // Your composable content goes here
        }
    }
}

活动onCreate(..) :-

public class MyJavaActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ComposeContent.INSTANCE.setContentFromJavaActivity(this);
    }
}

(创建 AbstractComposeViewComposeView 的实例仅在我们想要使用 compose UI(或在 Fragment 中)呈现 Activity 的一部分时才派上用场)