欢迎转载,转载请标明出处.
英文原文文档地址: Litho-doc
兼容性
Styles
Component可以像Android View的属性集的构建器一样,使用Android的style资源来构建它的prop.它让开发者能够直接使用style资源来定义静态的prop值或者prop的默认值.
可以通过在你的Component的Spec中实现@OnLoadStyle方法来支持Style.它的第一个参数是ComponentContext,你可以用它来检索生成一个包含stype资源的TypedArray.其他的参数需要是Output类型,并且名称与类型都与你想要设置的prop相同.
1 2 3 4 5 6 7 8 9 10 11 12
| @LayoutSpec class MyComponentSpec { @OnCreateLayout static ComponentLayout onCreateLayout( ComponentContext c, @Prop String prop1, @Prop int prop2) { return ...; } }
|
举个例子,为了对上面的MyComponent的两个prop实现style的支持,你先要按照惯例定义样式属性:
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="prop1" format="string" /> <attr name="prop2" format="integer" /> <declare-styleable name="MyComponent"> <attr name="prop1" /> <attr name="prop2" /> </declare-styleable> </resources>
|
接着你可以在你的@OnLoadStyle方法中收集这些属性的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @OnLoadStyle void onLoadStyle( ComponentContext c, Output<String> prop1, Output<Integer> prop2) { final DataBoundTypedArray a = c.obtainDataBoundAttributes(R.styleable.Text, 0); for (int i = 0, size = a.getIndexCount(); i < size; i++) { final int attr = a.getIndex(i); if (attr == R.styleable.MyComponent_prop1) { prop1.set(a.getString(attr)); } else if (attr == R.styleable.MyComponent_prop2) { prop2.set(a.getInteger(attr)); } } a.recycle(); }
|
这样,你就可以在style中定义prop1和prop2的值了:
1 2 3 4 5 6
| <?xml version="1.0" encoding="utf-8"?> <resources> <style name="SomeStyle"> <item name="prop1">@string/some_string</item> </style> </resources>
|
并且在MyComponent中使用它:
1 2 3
| MyComponent.create(c, 0, R.style.SomeStyle) .prop2(10) .build();
|
这样,prop1就能够从@string/some_string资源中获取值了.