首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在1.0.0-beta01的复合块中添加自定义视图(从view扩展)

如何在1.0.0-beta01的复合块中添加自定义视图(从view扩展)
EN

Stack Overflow用户
提问于 2021-03-17 01:21:43
回答 2查看 1.8K关注 0票数 0

我正试图通过函数AndroidView(viewBlock = { customView})将自定义视图组件包含到撰写部分中,这对于以前的版本有效,但现在对于1.0.0-beta01不起作用了,我找不到新的方法来做到这一点。

代码如下所示:

代码语言:javascript
复制
override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    val view = inflater.inflate(R.layout.fragment_recipe_lis, container, false)
    view.findViewById<ComposeView>(R.id.compose_view).setContent {
        Text("This is a compose view inside a layout")
        Spacer(modifier = Modifier.padding(10.dp))
        CircularProgressIndicator()
        Spacer(modifier = Modifier.padding(10.dp))
        Text(text = "Neat")
        Spacer(modifier = Modifier.padding(10.dp))

        val customView = HorizontalDottedProgress(LocalContext.current)
        AndroidView(viewBlock = { customView}) // Error here with the function definition
    }
    return view
}

也许你们中的一个知道。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-03-17 02:25:53

您必须传递一个工厂,而不是视图的实例。

代码语言:javascript
复制
AndroidView(factory = { HorizontalDottedProgress(it) })

代码语言:javascript
复制
AndroidView(::HorizontalDottedProgress)

如果您需要配置视图,请在后面的lambda中进行配置。

代码语言:javascript
复制
AndroidView(::HorizontalDottedProgress) { customView ->
    customView.doSomething()
}

阅读文档中的更多内容

票数 5
EN

Stack Overflow用户

发布于 2021-03-17 07:45:21

对于factoryAndroidView构造函数需要一个AndroidView参数:

构成了一个从factory获得的安卓视图。factory块将被精确地调用一次,以获得要组成的View,并且还保证在UI线程上调用它。

示例:

代码语言:javascript
复制
    //option 1
    val customView = TextView(LocalContext.current).apply { text = "New Text View" }
    AndroidView(factory = { customView })

    //option 2
    AndroidView({ context -> TextView(context).apply { text = "This is a TextView" } })

    //Option 3
    var size by remember { mutableStateOf(100) }
    AndroidView(::TextView,
        Modifier
            .background(Color.Blue)) { view ->
        view.layoutParams = ViewGroup.LayoutParams(size, size)
        view.apply { text = "This is the 3rd TextView" }  }
    }

在您的情况下,您只需使用其中之一:

代码语言:javascript
复制
    val customView = HorizontalDottedProgress(LocalContext.current)
    AndroidView(factory = { customView }) 

    AndroidView({ context -> HorizontalDottedProgress(context).apply { /* ... */ } })

    AndroidView(::HorizontalDottedProgress) { view ->
        view.apply { /*..*/ }
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66665718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档