TextView、AppCompatTextView和MaterialTextView該用哪一個?Android UI 組件發展史與演進對照表

在 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 組件,比如 ButtonTextViewEditText 等。
    • 這些控件依賴于系統,導致在不同版本的 Android 設備上可能存在行為、外觀不一致的問題。
    • 在 Android 3.0(Honeycomb,2011 年)開始引入 ActionBar,但這個組件在 Android 2.x 版本中無法使用。

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 組件,比如 AppCompatActivityAppCompatButton,讓開發者能在舊版本 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 組件(如 AppCompatButtonAppCompatTextView),這樣就能讓 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,并且提供了 CardViewCoordinatorLayout 等新組件。
    • 這些 Material 組件最早是在 android.support.design 包下,作為 Support Library v7 的一部分。
  • Material Components for Android(2018 年)

    • 2018 年,Google 推出了獨立的 Material Components for AndroidMDC-Android),并放入 com.google.android.material 命名空間。
    • 這個庫是對原生 Material Design 組件的增強版,提供 MaterialButtonMaterialCardViewTextInputLayout 等更豐富的 UI 控件,同時支持動態主題、暗色模式等功能。

4. AndroidX 時代(2018 年至今)

  • 時間:2018 年至今

  • 為什么出現 AndroidX?

    • Support Library(v4、v7 等)名稱混亂,不容易管理。
    • 許多 API 過時,Google 需要重新整理,提供更穩定的支持。
    • Android 9(API 28)之后,Google 推出了 AndroidX,并徹底廢棄了 Support Library
  • AndroidX 變化

    • android.support.v7.widget.AppCompatButtonandroidx.appcompat.widget.AppCompatButton
    • android.support.design.widget.TextInputLayoutcom.google.android.material.textfield.TextInputLayout
    • android.support.v4.app.Fragmentandroidx.fragment.app.Fragment
    • android.support.v7.app.AppCompatActivityandroidx.appcompat.app.AppCompatActivity

    AndroidX 之后,所有的新特性都會在 AndroidX 維護,舊的 Support Library 不再更新。


總結:如何選擇 UI 組件

控件類型適用場景示例
原生控件ButtonTextView不關心 UI 統一性,也不需要 Material Designandroid.widget.Button
AppCompat 控件AppCompatButtonAppCompatTextView需要兼容舊設備,確保 UI 在不同版本 Android 中一致androidx.appcompat.widget.AppCompatButton
Material Design 控件MaterialButtonTextInputLayout使用 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+)主要功能
TextViewAppCompatTextViewMaterialTextView文字顯示,支持樣式、行間距等
ButtonAppCompatButtonMaterialButton按鈕,支持波紋效果、圖標等
ImageButtonAppCompatImageButtonMaterialButton(帶圖標)圖片按鈕,支持點擊效果
EditTextAppCompatEditTextTextInputEditText輸入框,支持輸入文本、密碼等
TextInputLayout輸入框容器,支持浮動標簽、錯誤提示等
CheckBoxAppCompatCheckBoxMaterialCheckBox復選框,支持多選
RadioButtonAppCompatRadioButtonMaterialRadioButton單選按鈕
SwitchAppCompatSwitchMaterialSwitch開關按鈕
ToggleButtonAppCompatToggleButton(推薦使用 MaterialSwitch早期的開關按鈕,已逐步被 Switch 取代
SeekBarAppCompatSeekBarSlider進度條
ProgressBarAppCompatProgressBarCircularProgressIndicatorLinearProgressIndicator進度指示器,支持線性或圓形
SpinnerAppCompatSpinnerExposedDropdownMenu下拉選擇框(Material 版更現代)
ListViewAppCompatListViewRecyclerView列表控件(RecyclerView 性能更強)
ScrollViewAppCompatScrollViewNestedScrollView滾動視圖
ViewPagerViewPager2ViewPager2多頁面滑動視圖
ToolbarAppCompatToolbarMaterialToolbar頂部導航欄
FrameLayoutFrameLayoutMaterialCardView用于自定義布局,可增加陰影
CardView(Support Library v7)CardViewMaterialCardView卡片視圖,支持陰影、圓角
TabHostTabLayoutTabLayout選項卡布局
NavigationView(Support Library v7)NavigationViewNavigationView側邊導航欄
DrawerLayoutDrawerLayoutDrawerLayout抽屜式側滑菜單
FloatingActionButton(Support Library v7)FloatingActionButtonFloatingActionButton懸浮按鈕
CoordinatorLayoutCoordinatorLayoutCoordinatorLayout高級布局容器,支持滾動行為
Snackbar(Support Library v7)SnackbarSnackbar替代 Toast 的提示條
BottomAppBar底部工具欄
BottomNavigationView底部導航欄
PopupMenuPopupMenuMaterialPopupMenu彈出菜單
AlertDialogAppCompatDialogMaterialAlertDialog彈框,Material 版更美觀
DatePickerDialogTimePickerDialogAppCompatDatePickerDialogMaterialDatePickerMaterialTimePicker日期和時間選擇器
Chip(Support Library v7)ChipChip輕量級標簽,類似于按鈕
RecyclerView(Support Library v7)RecyclerViewRecyclerView替代 ListView,更高效的列表控件

選擇指南

  1. 如果你是 AndroidX 時代(2018+)的項目

    • 優先選擇 Material 組件(如 MaterialButtonMaterialCardView),可以獲得更現代的設計和更強的定制能力。
    • RecyclerView 替代 ListView,推薦 ViewPager2 而不是 ViewPager
  2. 如果你需要兼容 Android 4.x ~ 9 設備

    • 使用 AppCompat 組件(如 AppCompatButtonAppCompatEditText)以保證外觀和功能一致性。
  3. 如果你是 Android 10+(API 29 以上)

    • 直接使用 Material 組件,因為 AppCompat 組件的作用已經逐漸被 Material 組件取代。
  4. 什么時候使用原生組件?

    • 只在不關心 UI 兼容性、不需要 Material Design 時(比如一些性能要求極高的場景)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74259.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python學習筆記--實現簡單的爬蟲(一)

任務:爬取豆瓣最受歡迎的250個電影的資料 鏈接:豆瓣電影 Top 250 用瀏覽器打開后,使用F12或鼠標右鍵--檢查,查看網頁的源代碼,分析網頁結構,如下圖所示: 分析后得知: 1.電影名位于…

Postgresql 刪除數據庫報錯

1、刪除數據庫時,報錯存在其他會話連接 ## 錯誤現象,存在其他的會話連接正在使用數據庫 ERROR: database "cs" is being accessed by other users DETAIL: There is 1 other session using the database.2、解決方法 ## 終止被刪除數據庫下…

self Attention為何除以根號dk?(全新角度)

全網最獨特解析:self Attention為何除根號dk? 一、假設條件:查詢向量和鍵向量服從正態分布 假設查詢向量 q i q_i qi?和鍵向量 k j k_j kj?的每個分量均為獨立同分布的隨機變量,且服從標準正態分布,即:…

numpy學習筆記10:arr *= 2向量化操作性能優化

numpy學習筆記10:arr * 2向量化操作性能優化 在 NumPy 中,直接對整個數組進行向量化操作(如 arr * 2)的效率遠高于顯式循環(如 for i in range(len(arr)): arr[i] * 2)。以下是詳細的解釋: 1. …

Cursor+Claude-3.5生成Android app

一、Android Studio下載 https://developer.android.com/studio?hlzh-tw#get-android-studio 等待安裝完成 二、新建工程 點擊new project 選擇Empty Activity 起一個工程名 當彈出這個框時 可以在settings里面選擇No proxy 新建好后如下 點擊右邊模擬器&#xff0c…

WPF Reactive 數據綁定

文章目錄 Combox 綁定List-通過枚舉綁定方法一:方法二:Button 綁定TextBlock綁定NumericUpDown綁定Expander綁定checkbox綁定NumericUpDownCombox 綁定List-通過枚舉綁定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…

算法及數據結構系列 - 滑動窗口

系列文章目錄 算法及數據結構系列 - 二分查找 算法及數據結構系列 - BFS算法 算法及數據結構系列 - 動態規劃 算法及數據結構系列 - 雙指針 算法及數據結構系列 - 回溯算法 算法及數據結構系列 - 樹 文章目錄 滑動窗口框架思路經典題型76. 最小覆蓋子串567. 字符串的排列438. …

Android adb調試應用程序

啟動app 有的時候app不是預先安裝的,也不能從界面start一個app,這時需要后臺拉起app。 $adb shell am start package.name/Activity.name 例如,android原生camera app, 包名為com.android.camera2, mainActivity名為…

Java EE(15)——網絡原理——TCP協議解析一

一.確認應答/(確認)序列號 接收方接收到數據后,向發送方返回一個確認信號(ack),告訴發送方數據被成功接收。ACK報文段只是作為確認使用的,一般來說不攜帶應用層數據(載荷),也就是說只有報頭部分。但有可能…

node-ddk,electron 組件, 打開新窗口

node-ddk 打開新窗口 https://blog.csdn.net/eli960/article/details/146207062 也可以下載demo直接演示 http://linuxmail.cn/go#node-ddk 本文講解如何在渲染進程發起創建新窗口, 包括 window.open 在主進程定義窗口類型 import main, { NODEDDK } from "node-ddk…

git管理時keil項目忽略文件列表

在使用 Git 管理 Keil MDK(μVision 5)工程時,需要忽略編譯生成的臨時文件、調試文件、用戶配置等非必要內容。以下是忽略文件的詳細列表及說明,可直接保存為 .gitignore 文件: Keil MDK 工程的 .gitignore 文件 giti…

C#單例模式

單例模式 (Singleton),保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化對個對象,一個最好的辦法就是,讓類自身負責保護它的唯一實例。這個類可以保證沒…

ZYNQ的cache原理與一致性操作

在Xilinx Zynq SoC中,Cache管理是確保處理器與外部設備(如FPGA邏輯、DMA控制器)之間數據一致性的關鍵。Zynq的ARM Cortex-A9處理器包含L1 Cache(指令/數據)和L2 Cache,其刷新(Flush/Invalidate&…

Linux NFS、自動掛載與系統啟動管理指南

1. NFS客戶端掛載導出的目錄的方式 NFS(網絡文件系統) 允許將遠程服務器的目錄掛載到本地,像訪問本地文件一樣操作遠程文件。掛載方式主要有兩種: 手動掛載:使用 mount 命令(臨時生效,重啟后丟…

NO.55十六屆藍橋杯備戰|排序|插入|選擇|冒泡|堆|快速|歸并(C++)

插?排序 插?排序(Insertion Sort)類似于玩撲克牌插牌過程&#xff0c;每次將?個待排序的元素按照其關鍵字??插?到前?已排好序的序列中&#xff0c;按照該種?式將所有元素全部插?完成即可 #include <iostream> using namespace std; const int N 1e5 10; …

【Oracle資源損壞類故障】:詳細了解壞塊

目錄 1、物理壞塊與邏輯壞塊 1.1、物理壞塊 1.2、邏輯壞塊 2、兩個壞塊相關的參數 2.1、db_block_checksum 2.2、db_block_checking 3、檢測壞塊 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、數據字典 3.5、DBVERIFY 4、修復壞塊 4.1、RMAN修復 4.2、DBMS_REPA…

計算機網絡高頻(二)TCP/IP基礎

計算機網絡高頻(二)TCP/IP基礎 1.什么是TCP/IP?? TCP/IP是一種網絡通信協議,它是互聯網中最常用的協議之一。TCP/IP有兩個基本的協議:TCP(傳輸控制協議)和IP(互聯網協議)。 TCP(Transmission Control Protocol,傳輸控制協議)是一種可靠的、面向連接的協議。它負…

【大模型算法工程】大模型應用工具化、忠誠度以及知識庫場景下PDF雙欄解析問題的討論

1. 大模型時代應用工具化以及無忠誠度現象討論 接觸大模型久了&#xff0c;也慢慢探到一些大模型能力表現非常自然和突出的場景&#xff0c;比如AI搜索&#xff08;依賴大模型的理解總結能力&#xff09;、AI對話&#xff08;即chat&#xff0c;依賴大模型的生成能力&#xff0…

Java EE(13)——網絡編程——UDP/TCP回顯服務器

前言 本文主要介紹UDP和TCP相關的API&#xff0c;并且基于這兩套API實現回顯服務器 UDP和TCP UDP和TCP屬于網絡五層模型中傳輸層的協議 特點&#xff1a; UDP&#xff1a;無連接&#xff0c;不可靠&#xff0c;面向數據包&#xff0c;全雙工 TCP&#xff1a;有連接&#xff…

【藍橋杯】12111暖氣冰場(多源BFS 或者 二分)

思路 這題可以用BFS做&#xff0c;也可以用二分來做。 用二分這里只提供一個思路&#xff1a;對時間來二分查找&#xff0c;check函數就是檢查在特定的時間 t 0 t_0 t0?內每一個暖氣爐的傳播距離能否覆蓋所有格子。 用BFS做&#xff1a; 由幾個點開始向外擴散&#xff0c;知道…