6、常用UI控件:TextView、Button、EditText、ImageView、ProgressBar、RecyclerView的基本使用与属性设置

说实话,Android 开发里最常打交道的,就是这几个控件了。我刚入行那会儿,觉得它们太简单,不就是拖拖拽拽嘛。后来才发现,每个控件里都藏着不少门道。今天咱们就一个一个捋清楚。

6.1 TextView — 最基础的文本展示

TextView 说白了就是用来显示文字的。但你别小看它,我见过不少新手在它身上翻车。

核心属性速查:

  • android:text — 显示的文字内容
  • android:textSize — 字号,建议用 sp 单位
  • android:textColor — 文字颜色
  • android:maxLines — 最大行数,超出显示省略号
  • android:ellipsize — 省略号位置(end / start / middle)
  • android:gravity — 文字对齐方式
<TextView
    android:id="@+id/tvTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="欢迎来到性能优化实战"
    android:textSize="18sp"
    android:textColor="#333333"
    android:maxLines="2"
    android:ellipsize="end"
    android:gravity="center" />

我的小经验:设置 maxLines 时一定要搭配 ellipsize,否则文字超出后不会显示省略号,直接截断,用户体验很差。我曾经在一个新闻列表里忘了加 ellipsize,结果标题被截了一半,用户根本看不懂。

6.2 Button — 不只是点击

Button 继承自 TextView,所以 TextView 的属性它基本都能用。但 Button 有个默认的样式背景,不同系统版本长得还不一样。

<Button
    android:id="@+id/btnSubmit"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:text="提交"
    android:textSize="16sp"
    android:background="@drawable/btn_bg_selector" />

注意:直接设置 android:background 会覆盖系统默认的点击态效果。我建议用 SelectorMaterialButton 来保持按压反馈。否则用户按下去没反应,会以为手机卡了。

我个人习惯用 MaterialButton,它自带圆角、波纹效果,省心很多。

<com.google.android.material.button.MaterialButton
    android:id="@+id/btnSubmit"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:text="提交"
    app:cornerRadius="8dp" />

6.3 EditText — 用户输入的门面

EditText 是用户和 App 交互的重要入口。嗯,这里要注意,输入框的体验直接决定了用户对 App 的第一印象。

属性 作用 常用值
android:hint 提示文本 "请输入用户名"
android:inputType 输入类型 textPassword / number / phone
android:maxLength 最大输入长度 11
android:lines 固定行数 3
<EditText
    android:id="@+id/etPhone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="请输入手机号"
    android:inputType="phone"
    android:maxLength="11"
    android:background="@drawable/edit_bg" />

避坑指南:我曾经做过一个登录页面,没设置 inputType,结果用户输入手机号时弹出了全键盘,数字还得切换,体验极差。另外,密码框一定要用 textPassword,否则明文显示密码,用户会骂娘的。

6.4 ImageView — 图片展示的万能容器

ImageView 不只是放图片,它还能做缩放、裁剪、着色。你想想看,一个头像裁剪功能,全靠它了。

<ImageView
    android:id="@+id/ivAvatar"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:src="@drawable/ic_default_avatar"
    android:scaleType="centerCrop"
    android:contentDescription="用户头像" />

scaleType 是最容易踩坑的地方。我列几个常用的:

  • centerCrop — 按比例缩放,裁剪多余部分,适合头像
  • fitCenter — 按比例缩放,完整显示,适合大图
  • fitXY — 拉伸填满,会变形,慎用

注意:fitXY 时图片会变形,除非你明确知道自己在做什么,否则别用。我在一个商品详情页里见过用 fitXY 的,好好的商品图被拉成了椭圆,用户直接投诉。

6.5 ProgressBar — 加载中的优雅处理

ProgressBar 分两种:不确定进度(转圈)和确定进度(水平条)。

<!-- 转圈加载 -->
<ProgressBar
    android:id="@+id/pbLoading"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:visibility="gone" />

<!-- 水平进度条 -->
<ProgressBar
    android:id="@+id/pbProgress"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="8dp"
    android:max="100"
    android:progress="30" />

我的习惯:加载完成后一定要把 ProgressBar 设为 gone,而不是 invisible。gone 会释放布局空间,invisible 只是隐藏,位置还占着。我曾经因为用了 invisible,导致加载完成后页面底部空了一大块,找了半天 bug。

6.6 RecyclerView — 列表性能之王

RecyclerView 是 Android 开发中最常用的列表控件。说白了,它就是 ListView 的升级版,性能更好,灵活性更高。

使用 RecyclerView 需要三步:

  1. 在布局中声明 RecyclerView
  2. 创建 Adapter 和 ViewHolder
  3. 设置 LayoutManager
// 布局文件
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/rvList"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:padding="8dp" />

// Java/Kotlin 代码
RecyclerView rvList = findViewById(R.id.rvList);
rvList.setLayoutManager(new LinearLayoutManager(this));
rvList.setAdapter(new MyAdapter(dataList));

性能优化要点:

  • 一定要用 ViewHolder 模式,避免重复 findViewById
  • 设置 setHasFixedSize(true) 如果列表大小固定
  • 图片加载用 Glide 或 Coil,别自己写
  • 嵌套滑动时考虑 NestedScrollView + RecyclerView 的性能问题

我曾经踩过的坑:在一个聊天页面里,我忘了设置 setHasFixedSize(true),结果每次插入新消息时 RecyclerView 都要重新测量所有 item,导致滑动卡顿。加上这个属性后,性能提升非常明显。

知识体系总览

下面这张图帮你理清今天讲的六个控件的关系和适用场景:

常用UI控件知识体系 Android UI 控件 TextView Button EditText ImageView ProgressBar RecyclerView 核心要点 文本展示 → 用户交互 → 输入收集 → 图片加载 → 加载状态 → 列表性能 每个控件都有专属属性,合理搭配才能做出好用的 App

这六个控件是 Android 开发的基石。你想想看,一个 App 里 80% 的界面都离不开它们。掌握好这些基础,后面学自定义 View 和性能优化时才能游刃有余。

最后说一句:别急着背属性,多用、多试、多踩坑,自然就记住了。我刚开始学的时候,也是边查文档边写代码,慢慢就熟练了。

公众号:蓝海资料掘金营,微信 deep3321