خلال فعاليات مؤتمر FB للمطورين F8 تم الاعلان عن الكثير من الأدوات وإطارات العمل الخاصة بالمطورين ولكن شدني من خلال متابعتي لمجريات المؤتمر حديثهم عن Litho وكيفية بناء واجهات الاندرويد دون الحاجة لكتابة اي كود XML بطريقة سريعة ومنطقية واحترافية.
تعتبر Litho مكتبة خاصة بالاندرويد فقط وتعتمد في مبدأها على Yoga حيث تقوم بإنشاء ملفات Layout عند عملية تشغيل التطبيق دون التدخل من المبرمج وايضاً يمكنك تخصيصها من ناحية الالوان والإزاحة وجميع خيارات Components الأخرى الخاصة بالاندرويد. يفضل استخدامها مع القوائم إذا كانت متغيرة المحتوى كالصور والفيديو والنصوص وخلافه.
dependencies {
// ...
// Litho
compile 'com.facebook.litho:litho-core:0.3.1'
compile 'com.facebook.litho:litho-widget:0.3.1'
provided 'com.facebook.litho:litho-annotations:0.3.1'
annotationProcessor 'com.facebook.litho:litho-processor:0.3.1'
// SoLoader
compile 'com.facebook.soloader:soloader:0.2.0'
// Optional
// For debugging
debugCompile 'com.facebook.litho:litho-stetho:0.3.1'
// For integration with Fresco
compile 'com.facebook.litho:litho-fresco:0.3.1'
// For testing
testCompile 'com.facebook.litho:litho-testing:0.3.1'
}
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, false);
}
}
import com.facebook.litho.ComponentContext;
import com.facebook.litho.LithoView;
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ComponentContext c = new ComponentContext(this);
final LithoView lithoView = LithoView.create(
this /* context */,
Text.create(c)
.text("Hello, World!")
.textSizeDip(50)
.build());
setContentView(lithoView);
}
}
الان وعند تشغيل التطبيق سيظهر لك TextView يحمل النص Hello World دون كتابة أي سطر XM.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final ComponentContext context = new ComponentContext(this);
final Component component = Text.create(context)
.text("Hello World")
.textSizeDip(50)
.build();
setContentView(LithoView.create(context, component));
}
Text.create(context) .text("Hello World") .textSizeDip(50) .build();
@OnCreateLayout
static Component onCreateLayout(
ComponentContext c,
@Prop int color,
@Prop String title,
@Prop String subtitle) {
return Column.create(c)
.paddingDip(ALL, 16)
.backgroundColor(color)
.child(
Text.create(c)
.text(title)
.textSizeSp(40))
.child(
Text.create(c)
.text(subtitle)
.textSizeSp(20))
.build();
}
@OnCreateChildren
static Children onCreateChildren(final SectionContext c) {
Children.Builder builder = Children.create();
for (int i = 0; i < 32; i++) {
builder.child(
SingleComponentSection.create(c)
.key(String.valueOf(i))
.component(ListItem.create(c)
.color(i % 2 == 0 ? Color.WHITE : Color.LTGRAY)
.title(i + ". Hello, world!")
.subtitle("Litho tutorial")
.build()));
}
return builder.build();
}
الان ستلاحظ في النتيجة تغير خلفية Component بناءاً على قيمة معطاه وهي اذا كان عدد زوجي مثلاً يمكنك استخدامه كلون مشابه لصورة …الخ









