android 是否可以在Java编写的Activity中使用/布局Compose视图?

gab6jxml  于 2023-05-27  发布在  Android
关注(0)|答案(2)|浏览(315)

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

class ExampleFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        // Inflate the layout for this fragment
        return inflater.inflate(
            R.layout.fragment_example, container, false
        ).apply {
            findViewById<ComposeView>(R.id.compose_view).setContent {
                // In Compose world
                MaterialTheme {
                    Text("Hello Compose!")
                }
            }
        }
    }
}

我有一个用java写的活动,而不是Kotlin。可以从Java活动中使用setContent吗?如果是这样的话,我正在与语法斗争。

2eafrhcq

2eafrhcq1#

您可以简单地 Package 一个Kotlin函数,然后传递Activity示例并设置内容,而不是创建一个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的示例只有在我们想要使用编写UI(或在Fragment中)呈现Activity的一部分时才方便)

lymnna71

lymnna712#

是的,有可能。
首先,你应该创建一个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)

相关问题