在 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 時(比如一些性能要求極高的場景)。