如何将Android复杂页面组件化策略转化为?
摘要:常见方案对比 方案 适用场景 特点 include 布局 静态拆分,不需要复用 简单,布局复用 自定义 View UI+逻辑封装,可复用 封装度高 Fragment 动态加载,独立生命周期 灵活,但复杂 RecyclerV
常见方案对比
方案
适用场景
特点
include 布局
静态拆分,不需要复用
简单,布局复用
自定义 View
UI+逻辑封装,可复用
封装度高
Fragment
动态加载,独立生命周期
灵活,但复杂
RecyclerView
列表,每行算一个组件
最常用
实际建议
复杂页面(如患者详情页)
├── 患者基本信息卡片 → include 或 自定义 CardView
├── 医嘱列表区域 → RecyclerView + Adapter
├── 执行记录区域 → RecyclerView + Adapter
├── 备注信息区域 → include
└── 底部操作栏 → include
不是越拆越好:
2-3 个简单区域 → 直接写一个 XML
重复使用的区域 → 抽成 include 或自定义 View
需要独立管理生命周期 → Fragment
列表类型 → RecyclerView
多组件编码示例
示例场景:登录页拆分
LoginActivity
├── 顶部 Logo 区域(LogoView)
├── 账号输入区域(AccountInputView)
├── 验证码区域(CaptchaView)
└── 登录按钮区域(LoginButtonView)
方案 A:include + ViewBinding(简单拆分)
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<!-- 顶部 Logo -->
<include
android:id="@+id/layout_logo"
layout="@layout/layout_login_logo" />
<!-- 账号输入 -->
<include
android:id="@+id/layout_account"
layout="@layout/layout_account_input" />
<!-- 验证码 -->
<include
android:id="@+id/layout_captcha"
layout="@layout/layout_captcha" />
<!-- 登录按钮 -->
<include
android:id="@+id/layout_login_btn"
layout="@layout/layout_login_button" />
</LinearLayout>
LoginActivity.java
public class LoginActivity extends BaseActivity<ActivityLoginBinding> {
@Override
protected void initView(Bundle savedInstanceState) {
// 每个子布局都可以单独操作
binding.layoutLogo.setLogo(R.drawable.ic_logo);
binding.layoutAccount.setHint("请输入账号");
binding.layoutCaptcha.setOnRefreshListener(() -> viewModel.loadCaptcha());
binding.layoutLoginBtn.setOnClickListener(() -> submitLogin());
}
@Override
protected void observeViewModel() {
// 集中管理所有 L
