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 组件,比如
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.AppCompatButtonandroid.support.design.widget.TextInputLayout→com.google.android.material.textfield.TextInputLayoutandroid.support.v4.app.Fragment→androidx.fragment.app.Fragmentandroid.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 时(比如一些性能要求极高的场景)。
相关文章:
TextView、AppCompatTextView和MaterialTextView该用哪一个?Android UI 组件发展史与演进对照表
在 Android 开发中,UI 组件一直在不断演进,从最初的原生组件,到 Support Library(AppCompat 兼容库),再到如今的 Material Design 组件。这篇文章将梳理 Android UI 组件的发展历史,并提供详细的…...
[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…...
2025.3.20总结
阅读:《时间贫穷》第二章,里面讲到,运动,多行善事,体验自然,都会增强自我效能感,是对抗时间焦虑的强有力的方式。 花时间运动是值得的,公司每周三都是运动周,把运动视作…...
Tr0ll2靶机详解
一、主机发现 arp-scan -l靶机ip: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展示了一个汽车装备企业的整体信息化解决方案,阐述了该企业的业务特点和现状,主要包括按订单生产、多级计划和产品跟踪等,分析了信息化建设的主要困难,如信息管理手工化、过程数据追溯困难、…...
PyTorch模型转ONNX例子
参考:(optional) Exporting a Model from PyTorch to ONNX and Running it using ONNX Runtime — PyTorch Tutorials 2.6.0cu124 documentation import numpy as np import torch.utils.model_zoo as model_zoo import torch.onnx import torch.nn as nn import t…...
科技云报到:AI Agent打了个响指,商业齿轮加速转动
科技云报到原创。 3月16日,百度旗下文心大模型4.5和文心大模型X1正式发布。目前,两款模型已在文心一言官网上线,免费向用户开放。 同时,文心大模型4.5已上线百度智能云千帆大模型平台,企业用户和开发者登录即可调用AP…...
【蓝桥杯python研究生组备赛】005 数学与简单DP
题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…...
Chapter 4-16. Troubleshooting Congestion in Fibre Channel Fabrics
Show FCS Ie Example 4-17 shows the NX-OS command show fcs ie on Cisco MDS switches. 例 4-17 显示了 Cisco MDS 交换机上的 NX-OS 命令 show fcs ie。 Example 4-17 NX-OS command show fcs ie on Cisco MDS switches MDS9706-C# show fcs ie IE List for VSAN: 20 --…...
抖音视频数据获取实战:从API调用到热门内容挖掘
在短视频流量为王的时代,掌握抖音热门视频数据已成为内容运营、竞品分析及营销决策的关键。本文将手把手教你通过抖音开放平台API获取视频详情数据,并提供完整的代码实现及商业化应用思路。 一、抖音API权限申请与核心接口 抖音API需企业资质认证&…...
大白话读懂java对象创建的过程
1. java对象创建流程(大白话版) 咱们java对象被创建的过程大致如下,即: 在 JVM 中对象的创建,从⼀个 new 指令开始: 首先检查这个指令的参数是否能在常量池中定位到⼀个类的符号引用检查这个符号引用代表…...
Ubutu20.04安装docker与docker-compose
系统:20.04.6 LTS (Focal Fossa)" 1.配置apt源(在/etc/apt/sources.list中输入以下内容) # deb cdrom:[Ubuntu 20.04.6 LTS _Focal Fossa_ - Release amd64 (20230316)]/ focal main restricted deb http://mirrors.aliyun.com/ubuntu/ focal main restricted …...
AI图像理解技术的演进
在CLIP等现代多模态模型出现之前,早期的图生文技术主要依赖人工标注的ImageNet等数据集,但其技术路线与当前方法存在本质差异。 一、传统图生文技术的标注依赖 ImageNet的核心地位 在2012-2020年间,ImageNet的1,400万张人工标注图像ÿ…...
STM32 —— MCU、MPU、ARM、FPGA、DSP
在嵌入式系统中,MCU、MPU、ARM、FPGA和DSP是核心组件,各自在架构、功能和应用场景上有显著差异。以下从专业角度详细解析这些概念: 一、 MCU(Microcontroller Unit,微控制器单元) 核心定义 集成系统芯片&a…...
aiosignal
文章目录 安装 一、关于 aiosignal Github : https://github.com/aio-libs/aiosignal官方文档:https://aiosignal.aio-libs.org/gitter聊天:https://gitter.im/aio-libs/Lobby许可证 : Apache 2 aiosignal 管理 asyncio 项目中回调的项目。 Signal是已…...
在 VSCode 远程开发环境下使用 Git 常用命令
在日常开发过程中,无论是单人项目还是团队协作,Git 都是版本管理的利器。尤其是在使用 VSCode 连接远程服务器进行代码开发时,Git 不仅能帮助你管理代码版本,还能让多人协作变得更加高效。本文将介绍一些常用的 Git 命令ÿ…...
电脑节电模式怎么退出 分享5种解决方法
在使用电脑的过程中,许多用户为了节省电力,通常会选择开启电脑的节能模式。然而,在需要更高性能或进行图形密集型任务时,节能模式可能会限制系统的性能表现。这时,了解如何正确地关闭或调整节能设置就显得尤为重要了。…...
kubernetes高级实战
一、模拟企业环境进行一个实战部署 [rootmaster node]# kubectl apply -f pod-tomcat.yaml pod/tomcat-test created [rootmaster node]# kubectl get pods NAME READY STATUS RESTARTS AGE tomcat-test 2/2 Running 0 2s [rootmaster node]…...
【Java】——程序逻辑控制(构建稳健代码的基石)
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:【Java】内容概括 文章目录: 一.顺序结构二.分支结构1.if 语句1.1 语法格式11.2 语法格式21.3 语法格式3 …...
QT编程之PCM音频处理
一、高级播放接口(未压缩编码的音频文件) QMediaPlayer 支持MP3/WMA等压缩格式及网络流媒体播放,集成媒体控制(播放/暂停/进度调节)需设置QAudioOutput指定输出设备,支持播放速度调节(setPl…...
卫星互联网智慧杆:开启智能城市新时代
哇哦!在当下这个数字化浪潮正以雷霆万钧之势席卷全球的超酷时代,智慧城市建设已然成为世界各国你追我赶、竞相发力的核心重点领域啦!而咱们的卫星互联网智慧杆,作为一项完美融合了卫星通信与物联网顶尖技术的创新结晶,…...
Numpy broadcasting规则
Numpy的broadcast操作是为了将两个不同形状的数组,通过一系列规则,变换成形状相同的数组,从而使得它们之间可以进行按元素进行的计算。 Broadcasting的机制并不复杂,只要记住以下几条规则就可以了: 1. 顺序。首先&am…...
掌握 Shopee 商品数据:用爬虫解锁无限商机
在电商的浩瀚宇宙中,Shopee 宛如一颗璀璨星辰,吸引着无数卖家与买家在此汇聚。对于电商从业者、市场调研人员或是数据分析师而言,获取 Shopee 店铺的商品信息就如同掌握了开启财富之门的钥匙。而爬虫技术,正是帮助我们高效获取这些…...
Qt-QChart实现折线图
一、介绍场景 动态查看数据变化,或者了解数据发展趋势,让数据可以形象直观展现出来,这里推荐使用折线图的方式展现,本文抛砖引玉,简单实现一个实例,效果图如下: 二、实现步骤 1、charts组件 …...
取消Win10锁屏界面上显示的天气、市场和广告的操作
要取消Win10锁屏界面上显示的天气、市场和广告,您可以按照以下步骤操作: 方法一:更改锁屏界面设置 打开“设置”: 点击“开始”菜单,然后点击齿轮状的“设置”图标。 进入“个性化”: 在“设置”窗口中&a…...
IoT设备测试:从协议到硬件的全栈验证体系与实践指南
一、引言:IoT技术浪潮下的质量挑战 根据IDC预测,到2027年全球IoT设备数量将突破290亿台,涵盖智能家居、工业物联网(IIoT)、智慧城市、车联网等场景。然而,IoT系统的复杂性远超传统嵌入式设备——硬件异构性…...
大白话详细解读React框架的diffing算法
1. Diffing 算法是什么? Diffing 算法是 React 用来比较虚拟 DOM(Virtual DOM)树的一种算法。它的作用是找出前后两次渲染之间的差异(diff),然后只更新这些差异部分,而不是重新渲染整个页面。 …...
自然语言处理入门
第一章 自然语言处理入门 1 什么是自然语言处理 【什么是人工智能,分别对应哪几个领域】 AI是模仿甚至超越人的某项机能,NLP、CV、ASR NLP是机器理解并生成人类语言2 自然语言处理的发展简史 1950 -- 图灵提出“机器能思考吗”,划时代性的…...
Arduino示例代码讲解:Pitch follower 跟随
Arduino示例代码讲解:Pitch follower 跟随 Pitch follower代码功能代码逐行解释1. 注释部分功能:硬件连接:2. `setup()` 函数3. `loop()` 函数硬件连接**扬声器连接**:**光敏电阻连接**:**Arduino板**:运行结果修改建议视频讲解Pitch follower 这段代码是一个Arduino示例…...
从TouchDriver Pro到Touchdriver G1,Weart触觉手套全系解析:XR交互的“真实触感”如何实现?
Weart旗下的Touchdriver Pro触觉手套和Touchdriver G1触觉手套,凭借其技术创新,为用户带来了全新的触觉体验。Touchdriver Pro触觉手套通过多模态触觉反馈技术,提供力反馈、纹理渲染和温度提示,让用户在虚拟环境中感受到真实的触觉…...
