撰写UI:如何在运行时(不是在测试中)查询语义树?



在我的应用程序中,我想显示一些教程来引导用户通过应用程序-类似这样的东西。该应用程序已经在其他部分使用了教程,因此我想将Compose UI支持集成到现有的教程框架中。

为了这个目的,我需要得到几个可组合的位置和大小。因此我想设置语义属性到我想要标识的视图,像这样:
Text(text = text, Modifier.semantics {
set(customPropertyKey, "CustomValue")
})

我如何查询语义树,以找出有关值为"CustomValue"的可组合物的位置和大小等详细信息?

这在使用composeTestRule.onNode(...)的Junit测试中是可能的。然而,我如何在运行时(不是在单元测试中)?

我知道读取位置和大小可以使用onGloballyPositioned回调,但这会导致很多样板代码,我尽量避免。

@CommonsWare的解决方案似乎可行。只需创建一个布尔值来表示教程是否处于活动状态,然后在Composables中使用它来进行相应的渲染。如果需要项目的大小和位置,可以简单地将它们存储在视图模型中。要获得这些值,只需使用onGloballyPositioned{...}Modifier。您可以通过调用it.size(或命名labda参数)来检索大小,并使用相同的方法获取坐标。

我还建议你从头开始实现这些东西。可能会在一个临时项目中缓慢迁移。如果您尝试使用与视图系统相同的语义进行迁移,创建一个不平衡的混合,那么您将无法获得构建Compose的声明性范式的全部优势。

最新更新