仿今日头条 Android 项目(资源 + 布局 + Adapter 全面详解)

0 阅读20分钟

(第1部分:项目整体架构)


​编辑一、项目特点

1.高性能列表展示

2.多种内容布局(单图、三图、视频等)

3.数据驱动 UI

4.良好的用户交互体验

本项目基于 Android Studio 实现一个简化版“今日头条”,重点不在业务复杂度,而在于:

掌握 Android 核心开发能力

包括:

1.资源管理机制

2.布局系统设计

3.RecyclerView 使用

4.Adapter 架构设计


二、项目功能概述

本项目实现的功能如下:

1 新闻列表展示

通过 RecyclerView 展示新闻数据,包括:

1.标题

2.图片

3.来源

4.评论数

5.发布时间


2 多布局展示(核心)

项目支持两种新闻展示形式:

类型描述
单图左文右图
三图上文下三图

3 置顶新闻

第一条新闻具有“置顶标识”,通过特殊 UI 展示。


4 模拟数据加载

使用本地数据模拟新闻列表:

1.不依赖网络

2.便于教学与理解


三、项目结构深度解析


3.1 Java 层结构

cn.edu.headline
 ├── MainActivity
 ├── NewsAdapter
 ├── NewsBean


3.2 各模块职责分析


1 MainActivity(控制层)

作用:

1.初始化界面

2.构造数据

3.绑定 RecyclerView

本质:页面入口+数据调度中心


2 NewsAdapter(核心层)

作用:

1.创建 ViewHolder

2.绑定数据

3.控制布局类型

本质:数据->UI的桥梁


3 NewsBean(数据层)

作用:

1.封装新闻数据

2.提供统一数据结构

本质:数据模型(Model)


四、资源结构设计(Res 目录)


4.1 目录结构

res/
 ├── layout
 ├── drawable
 ├── mipmap
 ├── values


4.2 layout(布局资源)

包含:

1.activity_main.xml

2.list_item_one.xml

3.list_item_two.xml

4.title_bar.xml

用于定义 UI 界面结构


4.3 drawable(图片资源)

用于:

1.新闻图片

2.图标(如置顶标识)


4.4 values(公共资源)

包含:

1.样式(style)

2.颜色(color)

3.字符串(string)

实现代码复用


五、核心技术点概览


5.1 RecyclerView

用于高效展示列表数据

特点:

1.支持 View 复用

2.支持多布局

3.性能优于 ListView


5.2 Adapter 机制

连接:数据(List)<->界面(RecyclerView)


5.3 多布局实现

通过:type->控制不同布局实现:

1.单图新闻

2.三图新闻


5.4 ViewHolder 机制

作用:

1.缓存 View

2.提升性能


六、设计模式分析


6.1 MVC 架构

本项目采用经典 MVC 思想:

层级模块
ModelNewsBean
ViewXML布局
ControllerMainActivity

6.2 数据驱动 UI 思想

核心逻辑:数据->决定界面

举例:

数据UI
type=1单图
type=2三图

6.3 解耦设计

项目中:

1.数据与 UI 分离

2.逻辑与展示分离

提高可维护性


七、项目运行流程分析


7.1 启动流程

App启动 → MainActivity → setContentView


7.2 数据流程

构造数据  List<NewsBean>


7.3 UI绑定流程

RecyclerView → Adapter → ViewHolder → 显示

(第2部分:Android资源体系)


一、Android 资源体系概述

在 Android 开发中,资源(Resource)是指所有非代码内容,包括:

1.UI 布局

2.图片

3.颜色

4.字符串

5.样式

这些资源统一存放在:res/

Android 的核心思想之一:代码和资源分离


二、资源分类总览

Android 资源主要包括:

类型目录作用
layoutres/layout界面布局
drawableres/drawable图片资源
mipmapres/mipmap应用图标
valuesres/values公共资源
colorres/color颜色
menures/menu菜单
animres/anim动画

三、layout(布局资源)


3.1 layout 的作用

layout 用于定义:界面结构(UI)


3.2 本项目中的 layout 文件

文件作用
activity_main.xml主界面
list_item_one.xml单图新闻
list_item_two.xml三图新闻
title_bar.xml标题栏

3.3 layout 的本质

layout 本质是:XML描述UI树结构

例如:

LinearLayout
 ├── TextView
 ├── ImageView


3.4 布局加载过程

当调用:

setContentView(R.layout.activity_main);

系统会:

XML → View对象 → 显示在屏幕


3.5 布局在本项目中的作用

1.定义新闻结构

2.控制 UI 排列

3.与 Adapter 配合展示数据


四、drawable(图片资源)详解


4.1 drawable 的作用

用于存放:

1.图片(jpg/png)

2.图标

3.shape图形


4.2 本项目中的 drawable

例如:

R.drawable.food
R.drawable.sleep1
R.drawable.top


4.3 使用方式

在 Java 中:

imageView.setImageResource(R.drawable.food);


4.4 drawable 的分类

类型说明
bitmap普通图片
shape自定义图形
selector状态选择器

4.5 在本项目中的作用

新闻图片展示核心来源


五、values(公共资源)深度解析


5.1 values 的作用

用于定义:可复用的资源


5.2 常见文件

文件作用
strings.xml字符串
colors.xml颜色
styles.xml样式

六、style(样式)详解


6.1 什么是 style

style 用于:统一UI风格


6.2 本项目中的使用

style="@style/tvInfo"


6.3 style 的优势

1 代码复用

避免重复写:

android:textSize

android:textColor


2 统一风格

所有 TextView 风格一致


3 易维护

只需修改一处即可


6.4 style 在三图布局中的应用

三张图片统一尺寸


七、color(颜色资源)


7.1 定义

#FF0000


7.2 使用

android:textColor="@color/primary"


八、资源引用机制


8.1 R文件

Android 会自动生成:

R.layout.xxx

R.drawable.xxx


8.2 引用方式

类型示例
layoutR.layout.activity_main
drawableR.drawable.food
idR.id.tv_title

8.3 编译流程

XML资源 → 编译 → R.java → Java代码调用


九、本项目资源协作机制


9.1 数据 → 资源 → UI

NewsBean → Adapter → layout → drawable


9.2 示例流程

NewsBean.imgList
 ↓
Adapter读取
 ↓
setImageResource
 ↓
显示图片


9.3 多布局资源协作

type → 选择 layout
imgList → 填充图片


(第3部分:Android布局体系)


一、Android 布局系统概述

在 Android 开发中,布局(Layout)用于控制:

控件如何在屏幕上排列


核心作用

布局决定:

1.控件位置

2.控件大小

3.控件关系


布局的本质

ViewGroup(容器) + View(控件)


二、常见布局类型总览

Android 中常用布局包括:

布局特点
LinearLayout线性排列
RelativeLayout相对定位
FrameLayout层叠布局
TableLayout表格布局
ConstraintLayout约束布局(推荐)

三、LinearLayout(线性布局)


3.1 基本概念

LinearLayout 按顺序排列子控件:水平 或 垂直


3.2 核心属性

android:orientation="vertical"


3.3 示例

<LinearLayout>
    <TextView/>
    <TextView/>
</LinearLayout>


3.4 权重(weight)

android:layout_weight="1"


3.7 本项目中的应用

1 主布局

LinearLayout(垂直)


2 信息栏

LinearLayout(水平)

显示:

1.作者

2.评论

3.时间


四、RelativeLayout(相对布局)


4.1 基本概念

RelativeLayout 通过“相对关系”定位控件:

相对于父布局 或 其他控件


4.2 核心属性

layout_below
layout_toRightOf
layout_alignParentBottom


4.3 示例

<TextView id="A"/>
<TextView layout_below="@id/A"/>


4.6 本项目中的应用(重点)


1 单图布局

RelativeLayout
 ├── 左侧文字
 ├── 右侧图片


2 三图布局

标题在上
图片在中
信息在下


RelativeLayout 负责整体结构控制


五、FrameLayout(帧布局)


5.1 基本概念

所有子控件叠加在一起


5.2 特点

  • 后添加的覆盖前面的
  • 类似“图层”

5.3 示例

<FrameLayout>
    <ImageView/>
    <TextView/>
</FrameLayout>


5.4 使用场景

  • Fragment 容器
  • 弹窗
  • 覆盖效果

5.5 本项目情况

未使用,但可以用于:

实现图片+文字叠加


六、TableLayout(表格布局)


6.1 基本概念

类似HTML表格


6.2 特点

  • 自动对齐列
  • 行列结构

6.3 使用场景

  • 表单
  • 数据展示

6.4 本项目情况

未使用(新闻类 UI 不适合)

(第4部分:activity_main.xml )


一、activity_main.xml 作用概述

在 Android 项目中,activity_main.xml 是:

主界面布局文件

它负责定义应用启动后用户看到的第一屏 UI 结构


二、整体结构分析

根据你的代码,整体结构如下:

LinearLayout(垂直)
 ├── include(title_bar)
 ├── 分类导航栏(TextView 横向排列)
 ├── RecyclerView(新闻列表)


三、最外层布局解析


3.1 LinearLayout(根布局)

<LinearLayout
    android:orientation="vertical">


为什么使用 LinearLayout?

原因:

页面是“从上到下”排列的


布局效果

标题栏
↓
分类栏
↓
新闻列表


四、include 布局复用机制(重点)


4.1 代码

<include layout="@layout/title_bar"/>


4.2 什么是 include?

include 是 Android 提供的:

布局复用机制


4.3 为什么要使用 include?

如果不用 include:

每个页面都要写一遍标题栏

问题:

  • 代码重复
  • 难维护

五、分类导航栏解析


5.1 结构

<LinearLayout orientation="horizontal">
    <TextView text="推荐"/>
    <TextView text="动漫"/>
    <TextView text="实时"/>
</LinearLayout>


5.2 作用

实现类似:

今日头条顶部分类栏


5.3 为什么用 LinearLayout?

原因:

多个标签横向排列


六、RecyclerView 核心区域解析


6.1 代码结构

<RecyclerView
    android:id="@+id/rv_list"/>


6.2 RecyclerView 的作用

用于:

显示“新闻列表”


6.3 为什么使用 RecyclerView?

相比 ListView:

RecyclerViewListView
支持多布局不方便
性能更高一般
可扩展性强较弱

6.4 在 MainActivity 中绑定

mRecyclerView = findViewById(R.id.rv_list);


6.5 设置布局管理器

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));


6.6 设置 Adapter

mRecyclerView.setAdapter(mAdapter);


6.7 数据流过程

NewsBean → Adapter → ViewHolder → RecyclerView → 显示


七、页面渲染流程(重点)


7.1 启动流程

MainActivity.onCreate()
 ↓
setContentView()
 ↓
加载 XML
 ↓
生成 View 树


7.2 数据绑定流程

setData()
 ↓
List<NewsBean>
 ↓
Adapter
 ↓
RecyclerView 显示


八、UI 分层结构分析(重要)


8.1 分层思想

页面 = 多层结构组合


8.2 本项目分层

层级内容
顶部title_bar
中部分类栏
底部新闻列表

(第5部分:list_item_one.xml )


一、单图布局整体作用

list_item_one.xml 用于展示:

单图新闻

在实际新闻 App 中,这种布局非常常见,例如:

  • 普通资讯
  • 推荐新闻
  • 热点新闻

二、整体结构分析


2.1 布局结构图

RelativeLayout
 ├── LinearLayout(左侧内容)
 │   ├── 标题
 │   ├── 信息栏
 ├── ImageView(右侧图片)


2.2 UI效果

标题 + 信息       图片

左文右图布局


三、最外层 RelativeLayout 解析


3.1 代码

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="90dp"
    android:padding="8dp">


3.2 为什么用 RelativeLayout?

原因:

需要实现左右布局(文字 + 图片)


3.3 高度固定的意义

android:layout_height="90dp"

优点:

  • 列表高度统一
  • 滑动更流畅

四、左侧内容区域(LinearLayout)


4.1 代码

<LinearLayout
    android:orientation="vertical">


4.2 为什么用 LinearLayout?

因为:

标题在上,信息在下


4.3 内部结构

标题
↓
信息栏


五、标题 TextView 解析


5.1 代码

<TextView
    android:maxLines="2"
    android:textSize="16sp"/>


5.2 关键属性


(1)maxLines

android:maxLines="2"


(2)textSize

android:textSize="16sp"


(3)textColor

android:textColor="#3c3c3c"


六、信息栏区域解析(重点)


6.1 结构

RelativeLayout
 ├── iv_top(置顶图标)
 ├── LinearLayout(信息文本)


6.2 iv_top(置顶标识)

<ImageView
    android:id="@+id/iv_top"
    android:layout_alignParentBottom="true"/>


6.3 作用

用于显示:

“置顶新闻”


6.4 Adapter 中控制

if (position == 0)

第一条新闻显示该图标


6.5 信息文本区域

<LinearLayout
    android:orientation="horizontal">


包含:

  • 作者
  • 评论
  • 时间

6.6 样式复用(重点)

style="@style/tvInfo"


优势:

  • 统一字体
  • 减少代码
  • 易维护

七、右侧图片 ImageView 解析


7.1 代码

<ImageView
    android:id="@+id/iv_img"
    android:layout_toRightOf="@id/ll_info"/>


7.2 关键属性


(1)layout_toRightOf

android:layout_toRightOf="@id/ll_info"

图片在右侧


(2)padding

android:padding="3dp"

图片与边缘留空


7.3 数据绑定

iv_img.setImageResource(...)


八、单图布局的逻辑实现(结合 Adapter)


8.1 数据来源

NewsBean.imgList


8.2 绑定逻辑

if (imgList.size() > 0)
    设置图片


8.3 特殊情况(置顶)

position == 0 → 显示 iv_top


(第6部分:list_item_two.xml)


一、三图布局整体作用

list_item_two.xml 用于展示:

三图新闻

这种布局在新闻类 App 中非常常见,例如:

  • 娱乐新闻
  • 图片资讯
  • 推荐内容

二、整体结构分析


2.1 布局结构图

RelativeLayout
 ├── 标题(TextView)
 ├── 图片区域(LinearLayout)
 │   ├── ImageView
 │   ├── ImageView
 │   ├── ImageView
 ├── 信息栏(LinearLayout)


2.2 UI效果

标题
图片 图片 图片
作者 评论 时间


三、最外层 RelativeLayout 解析


3.1 代码

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


3.2 为什么用 RelativeLayout?

原因:

需要实现“上下结构 + 相对定位”


四、标题区域解析


4.1 代码

<TextView
    android:id="@+id/tv_title"
    android:maxLines="2"/>


4.2 特点

  • 最上方
  • 最重要信息

4.3 限制两行

android:maxLines="2"

防止 UI 撑高


五、三图区域解析(重点)


5.1 结构

<LinearLayout
    android:orientation="horizontal">


5.2 为什么用 LinearLayout?

原因:

三张图片横向排列


5.3 图片控件

<ImageView style="@style/ivImg"/>


5.4 样式复用(重点)

style="@style/ivImg"


5.5 ivImg 样式作用

统一:

  • 宽度
  • 高度
  • margin

六、信息栏解析


6.1 结构

<LinearLayout orientation="horizontal">


6.2 内容

  • 作者
  • 评论
  • 时间

6.3 样式复用

style="@style/tvInfo"


七、布局层级分析(重要)


7. 层级结构

RelativeLayout(根)
 ├── 标题
 ├── LinearLayout(三图)
 ├── LinearLayout(信息)


八、Adapter 中的三图绑定逻辑(核心)


8.1 ViewHolder 类型

MyViewHolder2


8.2 绑定代码

iv_img1.setImageResource(...)
iv_img2.setImageResource(...)
iv_img3.setImageResource(...)


8.3 数据来源

NewsBean.imgList(3个元素)


8.4 数据结构设计

List<Integer> imgList;


关键思想:

数据决定UI


九、多图布局实现原理总结


9. 核心流程

type = 2
 ↓
加载 list_item_two.xml
 ↓
绑定3张图片

(第7部分:RecyclerView )


一、RecyclerView 概述

在 Android 开发中,RecyclerView 是用于展示列表数据的核心组件。


1.1 RecyclerView 的本质

高性能、可复用的列表控件


1.2 为什么要用 RecyclerView?

相比 ListView:

特性RecyclerViewListView
多布局支持
性能优化一般
扩展性

二、RecyclerView 核心组成


2.1 三大核心组件

RecyclerView = Adapter + ViewHolder + LayoutManager


1 Adapter(适配器)

作用:

绑定数据


2 ViewHolder(视图缓存)

作用:

缓存View,减少findViewById


3 LayoutManager(布局管理器)

作用:

控制排列方式


三、RecyclerView 工作流程(重点)


3.1 数据到界面的流程

数据 → Adapter → ViewHolder → RecyclerView → 屏幕


3.2 详细流程


步骤1:创建 ViewHolder

onCreateViewHolder()


步骤2:绑定数据

onBindViewHolder()


步骤3:显示到屏幕


3.3 滑动机制(关键)

当用户滑动时:

View → 回收 → 复用 → 新数据绑定


这就是:

Recycler(回收机制)


四、ViewHolder 机制详解


4.1 传统问题

在 ListView 中:

频繁 findViewById → 性能差


4.2 ViewHolder 解决方案

class MyViewHolder extends RecyclerView.ViewHolder


4.3 本项目中的实现

MyViewHolder1
MyViewHolder2


对应:

  • 单图布局
  • 三图布局

五、LayoutManager 深度解析


5.1 常见类型

类型说明
LinearLayoutManager线性列表
GridLayoutManager网格
StaggeredGridLayoutManager瀑布流

5.2 本项目使用

new LinearLayoutManager(this)


5.3 效果

竖直滚动列表


六、RecyclerView 复用机制(核心)


6.1 什么是复用?

不重复创建View,而是重复使用


6.2 复用流程

滑出屏幕 → 回收 → 进入缓存池 → 重新使用


七、多布局实现原理(重点)


7.1 核心方法

getItemViewType()


7.2 工作流程

返回type
 ↓
onCreateViewHolder根据type加载不同布局


7.3 本项目实现

return NewsList.get(position).getType();


type:

  • 1 → 单图
  • 2 → 三图

八、Adapter 生命周期


8.1 关键方法

方法作用
onCreateViewHolder创建View
onBindViewHolder绑定数据
getItemCount返回数量

8.2 执行顺序

onCreate → onBind → 显示


九、性能优化机制


9.1 复用机制

减少创建对象


9.2 ViewHolder缓存

避免重复查找


9.3 局部刷新

notifyItemChanged()


十、RecyclerView 与 ListView 对比


特性RecyclerViewListView
ViewHolder强制可选
动画支持
扩展性

十一、本项目中的 RecyclerView 应用


11.1 初始化

mRecyclerView = findViewById(...)


11.2 设置布局

setLayoutManager


11.3 设置适配器

setAdapter


11.4 数据展示

NewsBean → Adapter → UI


(第8部分:NewsAdapter )


一、Adapter 的核心作用回顾

在 RecyclerView 中,Adapter 的职责是:

连接 数据 与 UI


二、NewsAdapter 类结构解析


2.1 类定义

public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>


2.2 为什么使用 ViewHolder 泛型?

支持多布局(不同ViewHolder)


2.3 成员变量

private Context mContext;
private List<NewsBean> NewsList;


2.4 作用

变量作用
mContext上下文
NewsList数据源

三、构造方法解析


3.1 代码

public NewsAdapter(Context context,List<NewsBean> NewsList)


3.2 作用

初始化:

  • 上下文
  • 数据

四、getItemViewType(多布局核心)


4.1 代码

return NewsList.get(position).getType();


4.2 作用

决定使用哪种布局


4.3 本项目逻辑

type布局
1单图
2三图

4.4 执行流程

position → type → layout


五、onCreateViewHolder 详解(重点)


5.1 方法作用

创建ViewHolder


5.2 核心代码

if (viewType == 1){
    inflate(list_item_one)
}else if (viewType == 2){
    inflate(list_item_two)
}


5.3 LayoutInflater 解析

LayoutInflater.from(mContext).inflate(...)

作用:

XML → View对象


5.4 返回 ViewHolder

return holder;


5.5 关键思想

不同type → 不同布局


六、onBindViewHolder 逐行解析(核心)


6.1 方法作用

绑定数据


6.2 获取数据

NewsBean bean = NewsList.get(position);


6.3 单图布局绑定逻辑


1 判断类型

if (holder instanceof MyViewHolder1)


2 控制置顶显示

if (position == 0){
    iv_top.setVisibility(View.VISIBLE);
}else{
    iv_top.setVisibility(View.GONE);
}


实现:

第一条新闻显示“置顶”


3 设置文本

title.setText(...)
name.setText(...)
comment.setText(...)
time.setText(...)


4 设置图片

iv_img.setImageResource(...)


5 安全判断(重要)

if (bean.getImgList().size()==0) return;


防止:

空数据崩溃


6.4 三图布局绑定逻辑


1 判断类型

else if (holder instanceof MyViewHolder2)


2 设置文本

title.setText(...)
name.setText(...)


3 设置三张图片

iv_img1.setImageResource(...)
iv_img2.setImageResource(...)
iv_img3.setImageResource(...)


6.5 绑定流程总结

position → bean → 判断类型 → 绑定UI


七、getItemCount 解析


7.1 代码

return NewsList.size();


7.2 作用

告诉 RecyclerView:

有多少条数据


八、ViewHolder 类解析


8.1 单图 ViewHolder

class MyViewHolder1 extends RecyclerView.ViewHolder


成员

  • iv_top
  • iv_img
  • title
  • name
  • comment
  • time

8.2 三图 ViewHolder

class MyViewHolder2 extends RecyclerView.ViewHolder


成员

  • iv_img1
  • iv_img2
  • iv_img3

九、Adapter 核心流程总结


getItemViewType()
 ↓
onCreateViewHolder()
 ↓
onBindViewHolder()
 ↓
显示数据


(第9部分:NewsBean 数据模型与数据驱动 UI 思想)


一、数据模型在项目中的作用

在 Android 开发中,数据模型(Model)用于:

封装业务数据

在本项目中,对应的类是:

NewsBean


二、NewsBean 类结构解析


2.1 类定义

public class NewsBean {


2.2 成员变量

private int id;
private String title;
private List<Integer> imgList;
private String name;
private String comment;
private String time;
private int type;


2.3 字段作用详解


1 id(新闻ID)

唯一标识一条新闻


2 title(标题)

新闻核心内容

在 UI 中对应:

tv_title


3 imgList(图片列表)

存储图片资源ID集合


4 name(作者)

新闻来源


5 comment(评论数)

用户互动信息


6 time(发布时间)

时间信息


7 type(类型,核心)

决定UI布局


2.4 Getter / Setter


作用

提供访问接口


示例

public String getTitle() {
    return title;
}


符合:

JavaBean 规范


三、数据驱动 UI 思想(重点)


3.1 什么是数据驱动 UI?

界面由数据决定,而不是写死


3.2 本项目体现


1 type 决定布局

type = 1 → 单图
type = 2 → 三图


2 imgList 决定图片

imgList.size → 图片数量


3 title/name 等决定内容

数据 → 文本显示


3.3 数据流过程

NewsBean → Adapter → ViewHolder → UI


四、MainActivity 中 setData() 解析


4.1 方法作用

构造模拟数据


4.2 核心代码

NewsList = new ArrayList<>();


4.3 循环构造数据

for (int i = 0; i < titles.length; i++)


4.4 创建对象

NewsBean bean = new NewsBean();


4.5 设置数据

bean.setTitle(titles[i]);
bean.setName(names[i]);


4.6 设置类型

bean.setType(types[i]);


关键:

type 控制布局


五、图片数据构造逻辑(重点)


5.1 switch 结构

switch (i)


5.2 示例分析


case 0

imgList0 = new ArrayList<>();

无图片(置顶)


case 1

imgList1.add(icons1[i - 1]);

单图


case 2

imgList2.add(...)
imgList2.add(...)
imgList2.add(...)

三图


六、数据与 UI 的映射关系


数据字段UI 控件
titletv_title
nametv_name
commenttv_comment
timetv_time
imgListImageView
type布局

(第10部分:项目总结)


一、项目整体回顾

通过前九个部分,我们已经完整分析了一个“仿今日头条”项目,涵盖:

  • 资源体系
  • 布局设计
  • RecyclerView 原理
  • Adapter 实现
  • 数据模型设计

1.1 项目核心结构总结

MainActivity(控制层)
        ↓
NewsAdapter(桥梁)
        ↓
RecyclerView(展示)
        ↓
ViewHolder(缓存)
        ↓
XML布局(UI)
        ↓
NewsBean(数据)


1.2 核心思想总结

整个项目围绕一个核心展开:

数据驱动 UI


二、项目核心技术总结


2.1 RecyclerView

  • 高性能列表控件
  • 支持 View 复用
  • 支持多布局

2.2 Adapter 机制

数据 → UI 的桥梁


2.3 多布局实现

type → 控制布局


2.4 ViewHolder

缓存View,提高性能


2.5 布局设计

  • LinearLayout(线性)
  • RelativeLayout(相对)

三、项目总结


1 多布局 RecyclerView

实现:

  • 单图新闻
  • 三图新闻

接近真实 App


 2 数据驱动 UI

数据决定界面,而不是写死


 3 模块化设计

  • title_bar 独立
  • item 布局拆分

4 样式复用

style="@style/tvInfo"


5 性能优化

  • ViewHolder
  • RecyclerView复用

这个项目的本质 = RecyclerView + 多布局 + 数据驱动UI