在 Android 开发中,UI 组件一直在不断演进,从最初的原生组件,到 Support Library(AppCompat 兼容库),再到如今的 Material Design 组件。这篇文章将梳理 Android UI 组件的发展历史,并提供详细的对照表,帮助开发者选择合适的 UI 组件。
时间线:Android UI 组件的发展
1. 原生 UI 组件(Android 1.0 ~ 4.x 时代)
- 时间:2008 年(Android 1.0 发布)~ 2013 年(Android 4.4 时代)
- 特性 :
- 最初的 Android 版本提供了基础 UI 组件,比如
Button
、TextView
、EditText
等。 - 这些控件依赖于系统,导致在不同版本的 Android 设备上可能存在行为、外观不一致的问题。
- 在 Android 3.0(Honeycomb,2011 年)开始引入
ActionBar
,但这个组件在 Android 2.x 版本中无法使用。
- 最初的 Android 版本提供了基础 UI 组件,比如
2. Support Library(Android 4.x ~ 9 时代)
-
时间:2011 年(Android 3.0 时代)~ 2018 年(Android 9)
-
Support Library(支持库):
- 为了解决不同 Android 版本的兼容性问题,Google 在 Android 3.0(Honeycomb)后推出了 Support Library,方便开发者在旧版本系统上使用新特性。
- 主要版本:
- v4(Android 1.6+):提供 Fragment、ViewPager、LoaderManager 等功能,支持最早的 Android 1.6。
- v7 (Android 2.1+):提供
AppCompat
组件,比如AppCompatActivity
、AppCompatButton
,让开发者能在旧版本 Android 设备上使用Toolbar
、Material Design 主题等。 - v13 (Android 3.2+):主要用于增强
Fragment
相关功能,较少使用。 - v17、v19(API 级别更高的支持库):提供 UI 适配、TV 设备支持等功能。
-
AppCompat 组件的出现(2014 年)
- Android 5.0(Lollipop,2014)引入了 Material Design,但老版本(Android 4.x)无法直接使用这些新特性。
- Google 在 Support Library v7 中引入了
AppCompat
组件(如AppCompatButton
、AppCompatTextView
),这样就能让 Android 4.x 设备也能使用 Material 主题和组件。
3. Material Design 组件库(Android 5.0 ~ 现今)
-
时间:2014 年(Android 5.0 发布)~ 现在
-
Material Design 1.0(2014 年)
- Android 5.0(Lollipop)推出了 Material Design 设计语言,系统 UI 组件也进行了大幅升级,比如
Button
变成了MaterialButton
,并且提供了CardView
、CoordinatorLayout
等新组件。 - 这些 Material 组件最早是在
android.support.design
包下,作为 Support Library v7 的一部分。
- Android 5.0(Lollipop)推出了 Material Design 设计语言,系统 UI 组件也进行了大幅升级,比如
-
Material Components for Android(2018 年)
- 2018 年,Google 推出了独立的
Material Components for Android
(MDC-Android ),并放入com.google.android.material
命名空间。 - 这个库是对原生 Material Design 组件的增强版,提供
MaterialButton
、MaterialCardView
、TextInputLayout
等更丰富的 UI 控件,同时支持动态主题、暗色模式等功能。
- 2018 年,Google 推出了独立的
4. AndroidX 时代(2018 年至今)
-
时间:2018 年至今
-
为什么出现 AndroidX?
- Support Library(v4、v7 等)名称混乱,不容易管理。
- 许多 API 过时,Google 需要重新整理,提供更稳定的支持。
- Android 9(API 28)之后,Google 推出了 AndroidX,并彻底废弃了 Support Library。
-
AndroidX 变化
android.support.v7.widget.AppCompatButton
→androidx.appcompat.widget.AppCompatButton
android.support.design.widget.TextInputLayout
→com.google.android.material.textfield.TextInputLayout
android.support.v4.app.Fragment
→androidx.fragment.app.Fragment
android.support.v7.app.AppCompatActivity
→androidx.appcompat.app.AppCompatActivity
AndroidX 之后,所有的新特性都会在 AndroidX 维护,旧的 Support Library 不再更新。
总结:如何选择 UI 组件
控件类型 | 适用场景 | 示例 |
---|---|---|
原生控件 (Button 、TextView ) |
不关心 UI 统一性,也不需要 Material Design | android.widget.Button |
AppCompat 控件 (AppCompatButton 、AppCompatTextView ) |
需要兼容旧设备,确保 UI 在不同版本 Android 中一致 | androidx.appcompat.widget.AppCompatButton |
Material Design 控件 (MaterialButton 、TextInputLayout ) |
使用 Material Design 主题,追求现代 UI 体验 | com.google.android.material.button.MaterialButton |
当然,下面是一张更完整的对照表,列出了 原生控件(Android 1.0) → Support Library 组件(AppCompat v7) → Material Design 组件(MDC-Android) 的演进过程,并附带控件的主要功能。
Android UI 组件演进对照表
原生控件(Android 1.0+) | AppCompat 控件(Support Library v7) | Material 组件(Material Design 1.0+) | 主要功能 |
---|---|---|---|
TextView |
AppCompatTextView |
MaterialTextView |
文字显示,支持样式、行间距等 |
Button |
AppCompatButton |
MaterialButton |
按钮,支持波纹效果、图标等 |
ImageButton |
AppCompatImageButton |
MaterialButton (带图标) |
图片按钮,支持点击效果 |
EditText |
AppCompatEditText |
TextInputEditText |
输入框,支持输入文本、密码等 |
无 | 无 | TextInputLayout |
输入框容器,支持浮动标签、错误提示等 |
CheckBox |
AppCompatCheckBox |
MaterialCheckBox |
复选框,支持多选 |
RadioButton |
AppCompatRadioButton |
MaterialRadioButton |
单选按钮 |
Switch |
AppCompatSwitch |
MaterialSwitch |
开关按钮 |
ToggleButton |
AppCompatToggleButton |
无 (推荐使用 MaterialSwitch ) |
早期的开关按钮,已逐步被 Switch 取代 |
SeekBar |
AppCompatSeekBar |
Slider |
进度条 |
ProgressBar |
AppCompatProgressBar |
CircularProgressIndicator 、LinearProgressIndicator |
进度指示器,支持线性或圆形 |
Spinner |
AppCompatSpinner |
ExposedDropdownMenu |
下拉选择框(Material 版更现代) |
ListView |
AppCompatListView |
RecyclerView |
列表控件(RecyclerView 性能更强) |
ScrollView |
AppCompatScrollView |
NestedScrollView |
滚动视图 |
ViewPager |
ViewPager2 |
ViewPager2 |
多页面滑动视图 |
Toolbar |
AppCompatToolbar |
MaterialToolbar |
顶部导航栏 |
FrameLayout |
FrameLayout |
MaterialCardView |
用于自定义布局,可增加阴影 |
CardView (Support Library v7) |
CardView |
MaterialCardView |
卡片视图,支持阴影、圆角 |
TabHost |
TabLayout |
TabLayout |
选项卡布局 |
NavigationView (Support Library v7) |
NavigationView |
NavigationView |
侧边导航栏 |
DrawerLayout |
DrawerLayout |
DrawerLayout |
抽屉式侧滑菜单 |
FloatingActionButton (Support Library v7) |
FloatingActionButton |
FloatingActionButton |
悬浮按钮 |
CoordinatorLayout |
CoordinatorLayout |
CoordinatorLayout |
高级布局容器,支持滚动行为 |
Snackbar (Support Library v7) |
Snackbar |
Snackbar |
替代 Toast 的提示条 |
无 | 无 | BottomAppBar |
底部工具栏 |
无 | 无 | BottomNavigationView |
底部导航栏 |
PopupMenu |
PopupMenu |
MaterialPopupMenu |
弹出菜单 |
AlertDialog |
AppCompatDialog |
MaterialAlertDialog |
弹框,Material 版更美观 |
DatePickerDialog 、TimePickerDialog |
AppCompatDatePickerDialog |
MaterialDatePicker 、MaterialTimePicker |
日期和时间选择器 |
Chip (Support Library v7) |
Chip |
Chip |
轻量级标签,类似于按钮 |
RecyclerView (Support Library v7) |
RecyclerView |
RecyclerView |
替代 ListView ,更高效的列表控件 |
选择指南
-
如果你是 AndroidX 时代(2018+)的项目:
- 优先选择 Material 组件 (如
MaterialButton
、MaterialCardView
),可以获得更现代的设计和更强的定制能力。 - RecyclerView 替代 ListView ,推荐
ViewPager2
而不是ViewPager
。
- 优先选择 Material 组件 (如
-
如果你需要兼容 Android 4.x ~ 9 设备:
- 使用 AppCompat 组件 (如
AppCompatButton
、AppCompatEditText
)以保证外观和功能一致性。
- 使用 AppCompat 组件 (如
-
如果你是 Android 10+(API 29 以上):
- 直接使用 Material 组件,因为 AppCompat 组件的作用已经逐渐被 Material 组件取代。
-
什么时候使用原生组件?
- 只在不关心 UI 兼容性、不需要 Material Design 时(比如一些性能要求极高的场景)。