TextView、AppCompatTextView和MaterialTextView该用哪一个?Android UI 组件发展史与演进对照表

news2025/3/28 13:39:12

在 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.coloradmin.cn/o/2318891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[GHCTF 2025]Popppppp[pop链构造] [php原生类的利用] [双md5加密绕过]

题目 <?php error_reporting(0);class CherryBlossom {public $fruit1;public $fruit2;public function __construct($a) {$this->fruit1 $a;}function __destruct() {echo $this->fruit1;}public function __toString() {$newFunc $this->fruit2;return $new…

Tr0ll2靶机详解

一、主机发现 arp-scan -l靶机ip&#xff1a;192.168.55.164 二、端口扫描、漏洞扫描、目录枚举、指纹识别 2.1端口扫描 nmap --min-rate 10000 -p- 192.168.55.164发现21端口的ftp服务开启 以UDP协议进行扫描 使用参数-sU进行UDP扫描 nmap -sU --min-rate 10000 -p- 19…

制造业数字化转型,汽车装备制造企业数字化转型案例,智能制造数字化传统制造业数字化制造业数字化转型案例

《某制造业企业信息化整体解决方案》PPT展示了一个汽车装备企业的整体信息化解决方案&#xff0c;阐述了该企业的业务特点和现状&#xff0c;主要包括按订单生产、多级计划和产品跟踪等&#xff0c;分析了信息化建设的主要困难&#xff0c;如信息管理手工化、过程数据追溯困难、…

科技云报到:AI Agent打了个响指,商业齿轮加速转动

科技云报到原创。 3月16日&#xff0c;百度旗下文心大模型4.5和文心大模型X1正式发布。目前&#xff0c;两款模型已在文心一言官网上线&#xff0c;免费向用户开放。 同时&#xff0c;文心大模型4.5已上线百度智能云千帆大模型平台&#xff0c;企业用户和开发者登录即可调用AP…

【蓝桥杯python研究生组备赛】005 数学与简单DP

题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi&#xff0c;价值是 wi。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…

大白话读懂java对象创建的过程

1. java对象创建流程&#xff08;大白话版&#xff09; 咱们java对象被创建的过程大致如下&#xff0c;即&#xff1a; 在 JVM 中对象的创建&#xff0c;从⼀个 new 指令开始&#xff1a; 首先检查这个指令的参数是否能在常量池中定位到⼀个类的符号引用检查这个符号引用代表…

AI图像理解技术的演进

在CLIP等现代多模态模型出现之前&#xff0c;早期的图生文技术主要依赖人工标注的ImageNet等数据集&#xff0c;但其技术路线与当前方法存在本质差异。 一、传统图生文技术的标注依赖 ImageNet的核心地位 在2012-2020年间&#xff0c;ImageNet的1,400万张人工标注图像&#xff…

电脑节电模式怎么退出 分享5种解决方法

在使用电脑的过程中&#xff0c;许多用户为了节省电力&#xff0c;通常会选择开启电脑的节能模式。然而&#xff0c;在需要更高性能或进行图形密集型任务时&#xff0c;节能模式可能会限制系统的性能表现。这时&#xff0c;了解如何正确地关闭或调整节能设置就显得尤为重要了。…

【Java】——程序逻辑控制(构建稳健代码的基石)

&#x1f381;个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f50d;系列专栏&#xff1a;【Java】内容概括 文章目录&#xff1a; 一.顺序结构二.分支结构1.if 语句1.1 语法格式11.2 语法格式21.3 语法格式3 …

卫星互联网智慧杆:开启智能城市新时代​

哇哦&#xff01;在当下这个数字化浪潮正以雷霆万钧之势席卷全球的超酷时代&#xff0c;智慧城市建设已然成为世界各国你追我赶、竞相发力的核心重点领域啦&#xff01;而咱们的卫星互联网智慧杆&#xff0c;作为一项完美融合了卫星通信与物联网顶尖技术的创新结晶&#xff0c;…

Qt-QChart实现折线图

一、介绍场景 动态查看数据变化&#xff0c;或者了解数据发展趋势&#xff0c;让数据可以形象直观展现出来&#xff0c;这里推荐使用折线图的方式展现&#xff0c;本文抛砖引玉&#xff0c;简单实现一个实例&#xff0c;效果图如下&#xff1a; 二、实现步骤 1、charts组件 …

取消Win10锁屏界面上显示的天气、市场和广告的操作

要取消Win10锁屏界面上显示的天气、市场和广告&#xff0c;您可以按照以下步骤操作&#xff1a; 方法一&#xff1a;更改锁屏界面设置 打开“设置”&#xff1a; 点击“开始”菜单&#xff0c;然后点击齿轮状的“设置”图标。 进入“个性化”&#xff1a; 在“设置”窗口中&a…

从TouchDriver Pro到Touchdriver G1,Weart触觉手套全系解析:XR交互的“真实触感”如何实现?

Weart旗下的Touchdriver Pro触觉手套和Touchdriver G1触觉手套&#xff0c;凭借其技术创新&#xff0c;为用户带来了全新的触觉体验。Touchdriver Pro触觉手套通过多模态触觉反馈技术&#xff0c;提供力反馈、纹理渲染和温度提示&#xff0c;让用户在虚拟环境中感受到真实的触觉…

排序算法实现:插入排序与希尔排序

目录 一、引言 二、代码整体结构 三、宏定义与头文件 四、插入排序函数&#xff08;Insertsort&#xff09; 函数作用 代码要点分析 五、希尔排序函数&#xff08;ShellSort&#xff09; 函数作用 代码要点分析 六、打印数组函数&#xff08;PrintSort&#x…

UDP协议原理

UDP协议原理 本篇介绍 在前面使用UDP编程时已经基本了解了UDP的工作模式&#xff0c;也知道了UDP有三个特点&#xff1a; 无连接不可靠面向数据报 但是当时并没有具体谈论为什么UDP有以上三个特点&#xff0c;基于这个原因&#xff0c;本篇就会针对这三个原因进行介绍 UDP…

EtherCAT转Modbus网关如何在倍福plc组态快速配置

EtherCAT转Modbus网关如何在倍福plc组态快速配置 在工业控制领域&#xff0c;EtherCAT和Modbus是两种常见的总线通信协议。EtherCAT以其高速的数据传输和灵活的网络配置被广泛应用于高性能自动化控制系统中&#xff0c;而Modbus则因其简单、稳定且兼容性强而被许多设备所支持。…

DooTask在Linux的离线部署教程

DooTask在Linux的离线部署教程 下载安装包 从网盘中将安装包下载到本地&#xff0c;下载地址 通过网盘分享的文件&#xff1a;DooTask项目管理工具 链接: https://pan.baidu.com/s/1hGmLXonT4c8hLiDP1QBr8w?pwdgdp6 提取码: gdp6 通过网盘分享的文件&#xff1a;DooTask项目…

Python实现WYY音乐下载

一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…

Java基础面试题学习

转换成自已的语言来回答&#xff0c;来源小林coding、沉默王二以及其它资源和自已改编。 1、概念 1、说一下Java的特点 我认为Java有很多特点 首先是平台无关性&#xff1a;Java可以实现一次编译到处运行&#xff0c;因为Java的编译器将源代码编译成字节码&#xff0c;使得该…

【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…