29、Android UI组件:TextView、Button、EditText、ImageView、RecyclerView基础

说实话,Android 开发入门,UI 组件这块是绕不开的坎。你想想看,用户打开 App,第一眼看到的就是界面。如果界面做得糙,功能再牛也白搭。

今天咱们就聊聊五个最常用的 UI 组件:TextView、Button、EditText、ImageView 和 RecyclerView。这五个组件,我几乎每个项目都在用。尤其是 RecyclerView,当年刚出来的时候,我还跟 ListView 较劲了好一阵子。

核心要点:这五个组件覆盖了 App 中 90% 的界面场景。显示文字、接收输入、展示图片、列表呈现,全齐了。

5.1 TextView — 最基础的文字显示

TextView 说白了就是用来显示一段文本。你可能觉得这太简单了,但我在项目中踩过不少坑。

比如设置字体颜色,很多人直接用 Color 类里的常量,像 Color.RED。但如果你需要自定义颜色,就得用十六进制。我个人习惯在 colors.xml 里统一管理颜色值,这样后期改主题色时,改一个文件就够了。

<TextView
    android:id="@+id/tvTitle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="欢迎来到 Kotlin 实战"
    android:textSize="18sp"
    android:textColor="@color/primary_text"
    android:textStyle="bold" />

小技巧:如果文本需要支持点击链接,记得加上 android:autoLink="web" 属性。我曾经有个需求,要在 TextView 里显示带超链接的隐私协议,用这个属性一行代码搞定。

5.2 Button — 不只是点击

Button 是用户交互的入口。但很多人只把它当成一个「可点击的 TextView」。其实 Button 有很多花样可以玩。

比如背景选择器。默认的 Button 样式比较丑,我一般会自定义一个 shape 作为背景。嗯,这里要注意:如果你给 Button 设置了 android:background,那它的默认阴影效果就没了。想要保留阴影,可以用 android:backgroundTint

<Button
    android:id="@+id/btnSubmit"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:text="提交"
    android:textColor="@android:color/white"
    android:backgroundTint="@color/primary_color" />

避坑指南:我曾经在项目里直接用 android:background 设置圆角背景,结果发现不同 Android 版本上显示效果不一致。后来改用 MaterialButton,兼容性好很多。

5.3 EditText — 用户输入的门户

EditText 是用户输入文本的地方。登录、注册、搜索,哪哪都离不开它。

我个人觉得,EditText 最容易被忽略的是输入类型。比如手机号输入框,应该设置 android:inputType="phone",这样键盘会自动切换到数字键盘。如果是密码输入,记得加上 android:inputType="textPassword"

<EditText
    android:id="@+id/etPhone"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:hint="请输入手机号"
    android:inputType="phone"
    android:maxLength="11"
    android:background="@drawable/bg_edittext" />

小技巧:给 EditText 添加 android:maxLength 可以限制输入长度。我见过很多新手没加这个,结果用户输入了超长文本,导致界面错乱。

5.4 ImageView — 图片展示利器

ImageView 用来显示图片。本地图片、网络图片、资源文件里的图片,都能展示。

这里有个关键属性:android:scaleType。它决定了图片如何适应 ImageView 的大小。我常用的有 centerCrop(裁剪填充)和 fitCenter(按比例缩放)。

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

避坑指南:我曾经在项目里直接加载大图到 ImageView,结果 OOM 了。后来改用 Glide 或 Coil 这样的图片加载库,它们会自动处理图片压缩和缓存。记住,生产环境别直接用 android:src 加载网络图片。

5.5 RecyclerView — 列表展示之王

RecyclerView 是 Android 中最强大的列表组件。它替代了老旧的 ListView 和 GridView。

使用 RecyclerView 需要三个核心部分:

  • Adapter:负责将数据绑定到每个 item 上
  • ViewHolder:缓存 item 的视图引用,提升性能
  • LayoutManager:决定列表的排列方式(线性、网格、瀑布流)

我刚开始用 RecyclerView 时,总觉得比 ListView 复杂。但用顺手后,发现它的扩展性真的强。比如添加分割线、实现拖拽排序,都很方便。

class MyAdapter(private val dataList: List<String>) : 
    RecyclerView.Adapter<MyAdapter.ViewHolder>() {

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val textView: TextView = itemView.findViewById(R.id.tvItem)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_layout, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.textView.text = dataList[position]
    }

    override fun getItemCount(): Int = dataList.size
}

核心要点:RecyclerView 的性能优化关键在 ViewHolder。它避免了重复调用 findViewById,滑动时流畅很多。我见过有些项目不用 ViewHolder,列表一长就卡顿。

知识体系结构图

下面这张图展示了这五个组件在整个 UI 体系中的位置和关系:

Android UI 组件知识体系 五大核心 UI 组件 TextView Button EditText ImageView RecyclerView Adapter ViewHolder LayoutManager 每个组件都有其核心属性和使用场景,掌握它们才能写出高质量的 UI

总结一下

这五个组件是 Android UI 开发的基石。TextView 显示文字,Button 处理点击,EditText 接收输入,ImageView 展示图片,RecyclerView 呈现列表。每个组件都有一些细节需要注意,比如输入类型、缩放模式、性能优化等。

我个人建议,初学者先把这五个组件练熟。别急着学那些花哨的自定义 View,基础打牢了,后面才能走得稳。

最后提醒一句:写 UI 代码时,多想想用户体验。比如 EditText 的 hint 文字要清晰,Button 的点击反馈要明显,RecyclerView 的滑动要流畅。这些细节,用户能感受到。

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