学习进度条
今日学习时间:3小时
今日代码量:800行
今日博客:1篇
一、核心技术与组件应用
1. Material Design 组件体系
1.1 MaterialButton 深度应用
<!-- 基础属性配置 -->
<com.google.android.material.button.MaterialButton
android:id="@+id/btnLogin"
android:layout_width="match_parent"
android:layout_height="56dp"
android:text="登录"
android:textSize="16sp"
android:padding="12dp"
android:backgroundTint="#93D5EA" <!-- 按钮背景色 -->
android:textColor="#FFFFFF" <!-- 文字颜色 -->
android:elevation="4dp" <!-- 阴影高度 -->
app:cornerRadius="8dp" <!-- 圆角半径 -->
app:strokeColor="#2196F3" <!-- 边框颜色 -->
app:strokeWidth="2dp" <!-- 边框宽度 -->
app:icon="@drawable/ic_login" <!-- 左侧图标 -->
app:iconGravity="textStart" <!-- 图标位置 -->
app:iconPadding="8dp" <!-- 图标内边距 -->
app:iconTint="#FFFFFF"/> <!-- 图标着色 -->
技术要点:
- 使用
backgroundTint替代传统背景色设置,保持 Material 设计风格 - 通过
elevation实现符合 Material Design 的阴影效果 cornerRadius控制圆角大小,统一应用设计规范- 图标集成方案,支持位置调整和着色控制
1.2 TextInputLayout 高级特性
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:hint="密码"
app:boxStrokeColor="#93D5EA"
app:hintTextColor="#93D5EA"
app:passwordToggleEnabled="true" <!-- 密码可见切换 -->
app:passwordToggleTint="#93D5EA" <!-- 切换按钮颜色 -->
app:counterEnabled="true" <!-- 字符计数器 -->
app:counterMaxLength="20" <!-- 最大长度限制 -->
app:errorEnabled="true" <!-- 错误提示启用 -->
app:helperText="至少6位字符" <!-- 辅助文本 -->
app:helperTextTextColor="#93D5EA">
<com.google.android.material.textfield.TextInputEditText
android:inputType="textPassword"
android:maxLength="20"/>
</com.google.android.material.textfield.TextInputLayout>
技术要点:
- 密码可见性切换功能实现
- 字符计数与输入限制
- 错误提示与辅助文本系统
- 多种样式选择(FilledBox/OutlinedBox)
2. 高级布局系统
2.1 CoordinatorLayout 应用模式
<androidx.coordinatorlayout.widget.CoordinatorLayout>
<!-- 主内容区 -->
<LinearLayout
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- 可滚动内容 -->
</LinearLayout>
<!-- 底部导航 -->
<com.google.android.material.bottomnavigation.BottomNavigationView
android:layout_gravity="bottom"
app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior">
<!-- 导航菜单 -->
</BottomNavigationView>
<!-- 悬浮按钮 -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_gravity="bottom|end"
app:layout_anchor="@id/bottom_navigation"
app:layout_anchorGravity="top|end|right"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
技术要点:
- 视图联动行为控制
- 滚动时自动隐藏底部导航
- 悬浮按钮的精确定位
- 嵌套滚动协调处理
2.2 ConstraintLayout 高级技巧
<androidx.constraintlayout.widget.ConstraintLayout>
<!-- 标题居中 -->
<TextView
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintHorizontal_bias="0.5"/>
<!-- 表单元素链式布局 -->
<EditText
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_percent="0.8"
app:layout_constraintHorizontal_bias="0"/>
<!-- 底部按钮组 -->
<LinearLayout
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintWidth_percent="0.9"
app:layout_constraintHeight_default="wrap"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<!-- 水平均分按钮 -->
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
技术要点:
- 百分比宽度控制
- 偏差(bias)定位技术
- 链(Chain)式布局管理
- 尺寸约束策略
二、UI设计模式实践
1. 卡片式设计系统
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="16dp"
app:cardElevation="8dp"
app:cardBackgroundColor="#FFFFFF"
app:cardUseCompatPadding="true"
app:contentPadding="16dp">
<LinearLayout>
<!-- 卡片内容 -->
</LinearLayout>
</androidx.cardview.widget.CardView>
设计规范:
- 统一圆角半径:16dp
- 标准海拔高度:8dp
- 内容内边距:16-24dp
- 阴影效果优化策略
2. 响应式布局方案
多设备适配策略:
<!-- values/dimens.xml -->
<dimen name="card_margin">16dp</dimen>
<dimen name="text_size_title">24sp</dimen>
<!-- values-sw600dp/dimens.xml -->
<dimen name="card_margin">24dp</dimen>
<dimen name="text_size_title">28sp</dimen>
<!-- values-sw720dp/dimens.xml -->
<dimen name="card_margin">32dp</dimen>
<dimen name="text_size_title">32sp</dimen>
布局优化技巧:
- 使用
ScrollView+ConstraintLayout处理小屏设备 - 大屏设备采用分栏布局
- 动态显示/隐藏导航元素
三、主题与样式系统
1. 自定义主题配置
<!-- styles.xml -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryVariant">@color/primaryDarkColor</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorSecondary">@color/secondaryColor</item>
<item name="colorSecondaryVariant">@color/secondaryDarkColor</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:statusBarColor">@color/primaryDarkColor</item>
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="cornerRadius">8dp</item>
<item name="android:textAppearance">@style/TextAppearance.App.Button</item>
</style>
<style name="TextAppearance.App.Button">
<item name="android:textSize">16sp</item>
<item name="android:textStyle">bold</item>
<item name="android:letterSpacing">0.02</item>
</style>
2. 夜间模式适配
<!-- values-night/themes.xml -->
<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/nightPrimary</item>
<item name="android:windowLightStatusBar">false</item>
<item name="cardViewStyle">@style/NightCardView</item>
</style>
<style name="NightCardView" parent="CardView">
<item name="cardBackgroundColor">@color/nightCardBackground</item>
<item name="cardElevation">4dp</item>
</style>
四、性能优化实践
1. 视图层级优化
优化前:
CoordinatorLayout
└── LinearLayout
├── CardView
│ └── LinearLayout
│ ├── TextInputLayout
│ │ └── TextInputEditText
│ └── MaterialButton
└── RecyclerView
优化后:
CoordinatorLayout
├── ConstraintLayout
│ ├── TextInputLayout (直接约束定位)
│ └── MaterialButton
└── RecyclerView
2. 过度绘制解决方案
- 使用
clipToPadding="false"优化滚动区域 - 减少不必要的背景设置
- 复杂卡片使用
ViewStub延迟加载 - 图片资源使用 WebP 格式
五、典型问题解决方案
1. 软键盘遮挡输入框
<activity
android:name=".LoginActivity"
android:windowSoftInputMode="adjustResize|stateHidden"/>
备选方案:
- 使用
ScrollView包裹表单 - 动态调整布局位置
- 监听键盘状态手动滚动
2. 多语言布局适配
<!-- 阿拉伯语RTL支持 -->
<LinearLayout
android:layoutDirection="locale"
android:textDirection="locale">
<!-- 动态调整图标位置 -->
<MaterialButton
app:iconGravity="start|textStart"
app:iconPadding="@dimen/icon_padding"/>
</LinearLayout>
六、项目总结
1. 技术体系架构
Android UI 系统
├── Material Components
│ ├── MaterialButton
│ ├── TextInputLayout
│ ├── CardView
│ └── BottomNavigation
├── 布局系统
│ ├── ConstraintLayout
│ ├── CoordinatorLayout
│ └── 响应式设计
└── 主题系统
├── 自定义主题
└── 夜间模式
2. 最佳实践清单
- 统一使用 Material Design 组件库
- 建立设计系统规范(间距/颜色/圆角)
- 复杂布局优先选择 ConstraintLayout
- 交互场景使用 CoordinatorLayout
- 全面适配深色模式
- 实施严格的性能优化方案
3. 扩展学习方向
- MotionLayout 动画系统
- 自定义 View 开发
- Compose 声明式 UI
- 高级主题引擎开发
- 无障碍功能适配

浙公网安备 33010602011771号