如何从java活动加载jetpack compose?
我有java活动:
@Override
public void onCreate(Bundle savedInstanceState) {
但是在按钮上单击我想打开@Composable 函数。
我通过java调用它
fun setContent(activity: AppCompatActivity){
activity.setContent {
CustomDialog() // contains Dialog
}
}
但是这个可组合函数破坏了我之前的看法。
如何在上一个视图中打开此自定义对话框?
只找到这样的解决方案:
class JetPackDialog() : DialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
JetPackDialogView()
}
}
}
}
在相关帖子中找到答案。我花了几个小时寻找它...... 可以在用 Java 编写的 Activity 中使用/布局 Compose 视图吗?
您不一定需要 AbstractComposeView。我能够做到 这只是与以下内容:
将 ComposeView 添加到您的layout.xml,就像添加任何其他视图一样:
<androidx.compose.ui.platform.ComposeView
android:id="@+id/compose_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
创建一个新的kt文件,例如ComposeFunctions.kt,它有一个将内容设置为的函数 撰写视图:
@file:JvmName("ComposeFunctions")
package (your package goes here)
fun setContent(composeView: ComposeView) {
composeView.setContent { composable kt function goes here } }
现在从你的java Activity/Fragment
ComposeView composeView = view.findViewById(R.id.compose_view);
ComposeFunctions.setContent(composeView);
我用过这个 在 Androidx.wear.compose.material.TimeText 的 WearOS 上成功运行:
composeView.setContent { TimeText() }