Layout Specs

Layout Spec 与 Android 上的复合View 逻辑等价。它只需现有组件组合到一个不可变的布局树中。

实现 Layout Spec 非常简单:只需编写一个带有 @OnCreateLayout 注解的方法,该方法返回包含 ComponentLayout 对象的不可变树。

我们从一个简单的例子开始:

@LayoutSpec
public class MyComponentSpec {
  @OnCreateLayout
  static Component onCreateLayout(
      ComponentContext c,
      @Prop int color,
      @Prop String title) {

      return Row.create(c)
          .alignItems(CENTER)
          .child(
              SolidColor.create(c)
                  .colorRes(color)
                  .widthDip(40)
                  .heightDip(40))
          .child(
              Text.create(c)
                  .text(title)
                  .textSizeRes(R.dimen.my_text_size)
                  .flexGrow(1f))
          .build();
  }
}

如您所见,Layout Spec 类使用 @LayoutSpec 注释。

使用 @OnCreateLayout 注解的方法必须具有 ComponentContext 作为其第一个参数,后跟使用 @Prop 标注的参数列表。注解处理器将在构建时对参数列表以及API中其他约束条件进行验证。

在上面的示例中,布局树具有一个根容器,带有两个孩子水平叠放( Row.create )并垂直居中( Align.CENTER )。

第一个孩子是一个 SolidColor 组件,接收 colorRes 作为Prop ,并具有40dp的宽度和高度。

第二个孩子是一个 Text 组件,接收名为 text 的属性,使用 grow(1f) 填充 MyComponent 中剩余可用的水平空间(等同于 Android 中LinearLayout 中的 layoutWeight)。文本大小在 my_text_size dimension 资源中定义。

您可以查看完整的 Yoga 文档以查看该框架公布的所有布局功能。

Last updated