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 Design android.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+) 主要功能
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 CircularProgressIndicatorLinearProgressIndicator 进度指示器,支持线性或圆形
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 版更美观
DatePickerDialogTimePickerDialog AppCompatDatePickerDialog MaterialDatePickerMaterialTimePicker 日期和时间选择器
Chip(Support Library v7) Chip Chip 轻量级标签,类似于按钮
RecyclerView(Support Library v7) RecyclerView RecyclerView 替代 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 时(比如一些性能要求极高的场景)。
相关推荐
doublelixin24 分钟前
AOSP (Android11) 集成Google GMS三件套
android
插件开发2 小时前
免费插件集-illustrator插件-Ai插件-随机填色
ui·illustrator
xzkyd outpaper3 小时前
onSaveInstanceState() 和 ViewModel 在数据保存能力差异
android·计算机八股
CYRUS STUDIO4 小时前
FART 脱壳某大厂 App + CodeItem 修复 dex + 反编译还原源码
android·安全·逆向·app加固·fart·脱壳
WAsbry5 小时前
现代 Android 开发自定义主题实战指南
android·kotlin·material design
xzkyd outpaper5 小时前
Android动态广播注册收发原理
android·计算机八股
唐墨1235 小时前
android与Qt类比
android·开发语言·qt
林林要一直努力6 小时前
Android Studio 向模拟器手机添加照片、视频、音乐
android·智能手机·android studio
AD钙奶-lalala6 小时前
Mac版本Android Studio配置LeetCode插件
android·ide·android studio
散人10247 小时前
Android Test3 获取的ANDROID_ID值不同
android·unit testing