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 开发的基石。TextView 显示文字,Button 处理点击,EditText 接收输入,ImageView 展示图片,RecyclerView 呈现列表。每个组件都有一些细节需要注意,比如输入类型、缩放模式、性能优化等。
我个人建议,初学者先把这五个组件练熟。别急着学那些花哨的自定义 View,基础打牢了,后面才能走得稳。
最后提醒一句:写 UI 代码时,多想想用户体验。比如 EditText 的 hint 文字要清晰,Button 的点击反馈要明显,RecyclerView 的滑动要流畅。这些细节,用户能感受到。