在Jetpack Compose中使用自定义视图

时间:2020-01-30 23:21:58

标签: android android-jetpack-compose

让我们假设我正在使用一些旨在提供一些UI窗口小部件的库。 假设该库提供了一个名为FancyButton的Button Widget。

另一方面,我有一个使用Android Studio 4创建的新项目,可让我使用Empty Compose Activity创建一个新项目。

问题是: 如何将这个FancyButton添加到视图堆栈?可以吗?或者使用Jetpack Compose,我只能使用专门为Jetpack Compose开发的组件。在这种情况下,AFAIK我只能使用Android标准组件(TextMaterialTheme等)。

如果我尝试使用类似这样的内容:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        MaterialTheme {
            Greeting("Android")
            FancyButton(context, "Some text")
        }
    }
}

然后我收到此错误:

e: Supertypes of the following classes cannot be resolved. Please make sure you have the required dependencies in the classpath.

2 个答案:

答案 0 :(得分:5)

当前(自0.1.0-dev04起),对此没有好的解决方案。将来,您将可以简单地将其称为FancyButton("Some text")(不需要context)。

您可以在撰写代码here中看到演示的样子。

答案 1 :(得分:0)

alpha 06中更新

可以在可组合文件中导入 Android View 实例。

使用ContextAmbient.current作为视图的context参数。

Column(modifier = Modifier.padding(16.dp)) {

    // CustomView using Object
    MyCustomView(context = ContextAmbient.current)

    // If the state updates
    AndroidView(viewBlock = ::CustomView, modifier = modifier) { customView ->
        // Modify the custom view
    }

    // Using xml resource
    AndroidView(resId = R.layout.view_demo)
}