首页
/ Tangram-Android 使用教程:从零开始构建灵活高效的UI界面

Tangram-Android 使用教程:从零开始构建灵活高效的UI界面

2025-07-09 01:28:48作者:房伟宁

前言

Tangram-Android 是一个功能强大的Android UI开发框架,它通过灵活的组件化设计,帮助开发者快速构建复杂多变的页面布局。本文将详细介绍如何从零开始使用Tangram-Android框架,包括环境配置、初始化流程、自定义组件注册以及数据绑定等核心功能。

环境准备

添加依赖

首先需要在项目中添加Tangram-Android的依赖。Tangram最新版本已经集成了RxJava,因此需要同时添加RxJava和RxAndroid的依赖。

Gradle方式:

implementation 'com.alibaba.android:tangram:2.0.5@aar'
implementation 'io.reactivex.rxjava2:rxjava:2.1.12'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

Maven方式:

<dependency>
  <groupId>com.alibaba.android</groupId>
  <artifactId>tangram</artifactId>
  <version>2.0.5</version>
  <type>aar</type>
</dependency>
<dependency>
  <groupId>io.reactivex.rxjava2</groupId>
  <artifactId>rxjava</artifactId>
  <version>2.1.12</version>
</dependency>
<dependency>
  <groupId>io.reactivex.rxjava2</groupId>
  <artifactId>rxandroid</artifactId>
  <version>2.0.2</version>
</dependency>

初始化Tangram框架

全局初始化

在Application中或首次使用前,需要对Tangram进行全局初始化。初始化时需要提供一个通用的图片加载器实现,以及自定义的ImageView类(如果应用中有自定义的ImageView)。

TangramBuilder.init(context, new IInnerImageSetter() {
    @Override
    public <IMAGE extends ImageView> void doLoadImageUrl(@NonNull IMAGE view,
                @Nullable String url) {
        // 这里以Picasso为例展示图片加载实现
        Picasso.with(context).load(url).into(view);
    }
}, ImageView.class);

构建TangramBuilder

在Activity的onCreate()方法中,需要创建TangramBuilder实例:

TangramBuilder.InnerBuilder builder = TangramBuilder.newInnerBuilder(TangramActivity.this);

创建builder对象后,框架会自动注册默认支持的卡片和单元格类型,并创建一个默认的IAdapterBuilder用于生成RecyclerView所需的Adapter。

注册自定义组件

Tangram框架提供了默认的卡片类型,但单元格通常需要开发者自定义。注册自定义单元格有三种方式:

1. 简单注册方式

builder.registerCell(1, TestView.class);

这种方式将类型为1的单元格绑定到TestView类,使用框架提供的BaseCell作为数据模型。

2. 自定义模型类注册方式

builder.registerCell(1, TestCell.class, TestView.class);

这种方式不仅指定了视图类,还指定了自定义的数据模型类TestCell,该类必须继承自BaseCell。

3. 完整注册方式

builder.registerCell(1, TestCell.class, 
    new ViewHolderCreator<>(R.layout.item_holder, TestViewHolder.class, TestView.class));

这种方式提供了最大的灵活性,可以自定义布局文件、ViewHolder和视图类。

创建TangramEngine实例

完成组件注册后,可以构建TangramEngine实例:

TangramEngine engine = builder.build();

注册支持模块

Tangram提供了一些内置的支持模块来增强功能:

engine.register(SimpleClickSupport.class, new XXClickSupport());
engine.register(CardLoadSupport.class, new XXCardLoadSupport());
engine.register(ExposureSupport.class, new XXExposureSuport());

这些模块分别处理点击事件、卡片异步加载和曝光统计等功能。

绑定RecyclerView

将TangramEngine与RecyclerView绑定:

setContentView(R.layout.main_activity);
RecyclerView recyclerView = (RecyclerView) findViewById(R.id.main_view);
engine.bindView(recyclerView);

处理滚动事件

为了支持预加载等功能,需要监听RecyclerView的滚动事件:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
        engine.onScrolled();
    }
});

可选配置

设置浮动视图偏移

如果有顶部或底部固定栏,需要设置偏移量防止浮动视图重叠:

engine.getLayoutManager().setFixOffset(0, 40, 0, 0);

设置预加载数量

调整预加载的卡片数量(默认为5):

engine.setPreLoadNumber(3);

加载并绑定数据

最后,将业务数据绑定到引擎。通常数据来自网络请求,这里演示从本地asset读取:

String json = new String(getAssertsFile(this, "data.json"));
JSONArray data = null;
try {
    data = new JSONArray(json);
    engine.setData(data);
} catch (JSONException e) {
    e.printStackTrace();
}

总结

通过以上步骤,我们已经完成了Tangram-Android框架的完整集成流程。Tangram的强大之处在于其灵活的组件化设计,开发者可以通过组合不同的卡片和单元格类型,快速构建出复杂多变的页面布局,同时保持代码的清晰和可维护性。在实际项目中,可以根据业务需求进一步扩展自定义组件和支持模块,充分发挥Tangram的潜力。