@Retention(value=CLASS) public @interface OnCreateLayout
LayoutSpec. The framework calls the method
annotated with OnCreateLayout in the LayoutSpec to resolve a layout. The
framework can call onCreateLayout from any thread and as many times as required. This
method should not create side effects. The annotated method must return a Component and can
receive the following arguments.
Required:
Optional annotated arguments:
The annotation processor will validate this and other invariants in the API at build time. The annotated arguments are inputs which should be used to create the layout of the spec.
For example:
@LayoutSpec
public class HeaderSpec {
@OnCreateLayout
static Component onCreateLayout(
ComponentContext c,
@Prop String title,
@Prop String subtitle,
@Prop String imageUrl,
@State boolean isSelected) {
return Column.create(c)
.paddingDip(YogaEdge.ALL, 8)
.backgroundColor(isSelected ? Color.WHITE : Color.GREEN)
.child(
Image.create(c)
.url(imageUrl)
.marginDip(YogaEdge.BOTTOM, 4)
)
.child(
Text.create(c)
.text(title)
.textSizeSp(16)
.marginDip(YogaEdge.BOTTOM, 4)
)
.child(
Text.create(c)
.text(subtitle)
.textSizeSp(12)
)
.build();
}
}
Notice how imageUrl, title, subtitle and isSelected are used
to set properties on different components within the layout. In the example above, the layout
tree has a root container with three children stacked vertically (Column.create(c) ). The
first child is an Image component (Image.create(c)) which renders and image from a URL
(similar to Android's ImageView). The second and third children are Text components
(Text.create(c)) which renders a text equivalent to the Android TextView.
OnCreateLayoutWithSizeSpec,
OnUpdateState,
OnEvent