Android 常用 UI 组件

news2025/1/13 16:29:25

目录

​编辑

1.  View 和ViewGroup

2.  Android UI 开发概述

2.1  界面布局开发

2.2  控件开发

2.3  AdapterView 与 Adapter 开发

2.4  UI 组件开发

2.5  自定义 View、图形图像和动画


1.  View 和ViewGroup

        Android中所有的UI元素都是使用View和ViewGroup对象建立的, View是一个可以将一些信息绘制在屏幕上并与用户产生交互的对象,而 ViewGroup是一个包含多个View和ViewGroup 的容器,用来定义 UI 布局。

        Android提供了一系列的View和ViewGroup的子类,开发者可以灵活地组合使用它们来完成界面布局、界面元素绘制和用户交互等工作。同时,开发者还可以选择性地继承一些系统提供的View,来自定义View,把自己定义的界面元素显示给用户。

        Android 使用 View类作为界面开发的超类,所有的界面开发都与 View 有关.多个 View是一个ViewGroup,但ViewGroup本身继承自View,所以, Android界面由View和ViewGroup任意组合而成, Android的界面开发其实就是对View及其各种子孙类做操作。

        Android的UI开发使用层次模型来完戌,一般都是在一个ViewGroup中嵌套多层ViewGroup,每一层中含有任意数目的View。我们可以将整个屏幕看做一个ViewGroup,它同时也是一个View.而在这个整体的ViewGroup之中,又有多个ViewGroup和View.每个ViewGroup中又可以有多个子ViewGroup和View,其基本结构如下图3-1所示。

图 3-1 View 和 ViewGroup 基本结构

        需要注意的是,虽然Android没有规定嵌套的层次深度上限,但是经过大量的实际测试证明,以目前主流的Android手机配置,如果一个界面超过10层嵌套,它的性能会大幅下降,这个界面的显示会变慢,所以一般不要让嵌套的层次太多。图 3-1 中所示的 View 和ViewGroup 基本结构中有 3 层嵌套,它的性能就可以完全得到保证。

        由于View和ViewGroup在UI开发中占有很重要的作用,所以有必要讲解一下两者的于孙类继承关系,如图3-2所示,图中的空心箭头表示“继承自”的关系。

图 3-2 View 的子孙类

        如上图 3-2 中所示,View 的子孙类大体上由 ViewGroup 类和一些单个的界面元素组成,而ViewGroup由几个与布局有关的子类继承, Android的UI开发就是组合使用并扩展这些View 子孙类的过程。

        从View和ViewGroup的继承图中可以大致把Android UI的开发划分为两部分,分别是除了ViewGroup之外的View的子孙类的开发和ViewGroup子孙类的开发,但是在ViewGroup的子类中, AdapterView (适配器控件)与其他几种相比是有很大区别的,它的内容是由Adapici (适配器)为其填亢的,所以我们可以把它单独划分为 类。Audvid中还提供一些非继承自 View 的组件,但这些组件都与 UI 开发相关,所以也属于 UI 开发的范畴,可以自成一类。为了满足更加复杂多变的UI设计需求, Android还提供了自定义View的功能,开发者可以通过自定义View来完成各种各样的UI设计与显示任务

2.  Android UI 开发概述

        Android中使用一个叫做“widget”的集合来描述所有的View元素,可称其为View控件,它包括界面布局、控件和 AdapterView 等。综上所述,可以得到如下所述的 5 种 AndroidUI 开发分类。

2.1  界面布局开发

        除AdapterView之外的ViewGroup的子孙类,以下列出的是几种常用的界面布局方式。常用布局,按照横或竖的线性排列布局。

(1) LinearLayout(线性布局)

常用布局,按照横竖线性排列布局。

(2) RelativeLayout (相对布局)

常用布局,按照相对位置来布局。

(3) FrameLayout(帧布局)

一块在屏幕上提前预定好的空白区域,可以填充一些 View 元素到里面。

(4) TableLayout (表格布局)

以表格的形式布局。

(5) AbsoluteLayout (绝对布局)

通过绝对位置坐标布局,但不能做屏幕适配,故不推荐使用。

具体操作介绍:

Android UI 开发·界面布局开发·案例分析:

Android UI 开发·界面布局开发·案例分析-CSDN博客

2.2  控件开发

        继承自View的单个界面元素。 Android自带了几十个控件,常见的比如TextView (文本框) 、EditText (编辑框) 、Button (按钮)、CheckBox (复选框)、ImageView (图片显示控件) 、VideoView (视频播放控件)等。这些控件一般通过各种界面布局方式或AdapterView等被安排在界面中,显示给用户,并与用户进行交互。

2.3  AdapterView 与 Adapter 开发

        AdapterView 的子孙类。除了界面布局方式和基本的控件之外,Android 中还提供了多个与适配器相关的控件,这些控件都使用一个适配器来决定该控件显示的内容,它通常是一个列表,其中的数据由适配器提供,而数据源则比较灵活,可以是程序内部数据、本地数据或网络数据等。常用的系统自带的Adapter有BaseAdapter、 SimpleAdapter和SimpleCursorAdapter等,除此之外,开发者还可以继承BaseAdapter来自定义Adapter.常见的与适配器相关的控件有ListView、 Spinner、 Gallery和GridView等。

2.4  UI 组件开发

        与UI相关的Android组件。Android提供了包括之前讲过的四大组件在内的一套组件,其中有一些是与UI开发相关的,一般将这些与UI开发相关的组件称为UI组件,它们让开发者在设计UI时,多出了一种不使用View和ViewGroup对象的选择。

        UI组件提供了一套标准化的 UI 布局,开发者只需要简单地指定其中的内容,这些组件即可按照各自的布局格式将信息显示在屏幕上,所以使用它们变得非常方便。这些组件通常不是继承自View或ViewGroup,但是它们仍然是使用View的子孙类将信息显示在屏幕上的,所以它们与View的关系非常密切。

        常用的UI组件有Menu、 ActionBar (4.0的新特性) 、Dialog和Notification等,其中Menu 是 View 的子类,而后三者个是。

2.5  自定义 View、图形图像和动画

        无论是控件,还是UI组件,开发者都可以自定义其中的界面布局样式,通常的做法是继承一个View或其子孙类,然后重写一些方法,一般都需要重写onDraw()方法,该方法用来定义在屏幕上如何进行绘制。

        自定义 View 在界面美化、视频图像处理和游戏开发等技术中常被使用。图形图像处理中也大量地应用到了自定义View. Android中提供了一些类库,可以实现动画效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1181929.html

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

相关文章

【工具】OCR方法|不用下载额外的软件,提取扫描中英文PDF的目录文本的最优解!(一)

需求: 1)从PDF里快速提取目录; 2)不想下载任何软件。 我提取出来的目录文本会用于嵌入到PDF中,向PDF批量添加目录的软件以及软件的使用方法可以看我上一篇文章:PDF批量插入目录。 以下是我自己能想到的方…

竞赛 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的驾…

【Python深入学习】- 书籍推荐|数据结构和算法介绍|内建集合数据类型

🌈个人主页: Aileen_0v0 🔥系列专栏:PYTHON学习系列专栏 💫"没有罗马,那就自己创造罗马~" 若把编写代码比作行军打仗,那么要想称霸沙场,不能仅靠手中的利刃,还需深谙兵法。Python是一把利刃&…

oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。

一、问题 oracle 使用regexp_substrCONNECT BY LEVEL来,根据特定字符拆分成多行。 (注意这里我的数据是每个值都有“ ; ”,即使后面没有值,后面也会有个“ ; ”, 如果是正常的分隔符,sql 需要改成” LEVEL…

Centos7下安装使用K3S

## K3S简介 K3S官方文档链接 K3s是一个轻量级的、专为容器化应用和Kubernetes集群设计的开源Kubernetes发行版。K3s的目标是提供一个更小、更简单、更易于部署和维护的Kubernetes集群。它是Rancher Labs开发的一个项目,旨在满足边缘计算、IoT设备、开发和测试环境…

QoS(服务质量)学习记录

一、概述 QoS,英文全称quality of service,是网络通信协议的设计提供了理论基础。 QoS的度量指标 带宽 时延 指数据报文从发送端到接收端所需要的延迟时间。时延包括传输延迟、发送端处理延迟和接收端处理延迟。 抖动 描述延迟变化的程度&#xf…

栈(定义,基本操作,顺序存储,链式存储)

目录 1.栈的定义1.重要术语2.特点 2.栈的基本操作3.栈的顺序存储1.顺序栈的定义2.基本操作1.初始化2.进栈3.出栈4.读栈顶 3.共享栈 4.栈的链式存储 1.栈的定义 栈( Stack)是只允许在一端进行插入或删除操作的线性表。 一种受限的线性表,只能在栈顶进行插…

IDEA使用Git进行代码管理教程

系列文章目录 1.Win11Git安装教程 2.git同时配置Gitee和GitHub 文章目录 系列文章目录前言一、Git提交代码二、合并分支三、版本回退 前言 这一篇文章主要用来记录如何使用IDEA中的git进行代码管理,包括日常开发中进行代码提交,以及如何将开发分支的代…

红黑数原理及存在原因

我红黑树那么牛,你们为什么不用?_哔哩哔哩_bilibili 面试时经常会被问到红黑树,它到底有什么优点呢? 对于查找数据,数组二分查询速度最快,时间复杂度为O(logN)。但是如果增加和删除数据,数组就…

TikTok小店运营的三大技巧!跨境电商必看

众所周知,国内的抖音早已风生水起,抖音给了很多普通人一夜暴富的机会。而Tiktok也跟随着抖音开启了商业模式,目前流量与机会都是不可小觑的。在店铺申请通过,成功入驻之后,又该如何运营?这篇文章为大家解答…

每天一点python——day63

#第63天 #字符串的字符串的查询操作字符串的查询操作方法 如图 我们可以把字符串看做是关于字符的列表 所以字符串与列表查的操作是非常相似的 区别在于 当我们获得字符串中指定子串索引的时候除了index()方法,还有如上图所示的rindex&#x…

得帆云iPaaS白皮书|WMS集成,打造高效规范的仓储管理业务生态

仓储管理,在传统企业运作中往往是比较容易被管理者忽视的一个部分,部分管理者认为仓库只是放货的场所,能正常出入库即可。 而随着企业信息化的不断发展,越来越多的企业意识到仓储管理与生产、销售、发货有着密切的联系&#xff0…

使用STM32微控制器进行 Blink LED

在嵌入式系统开发中,点亮一个简单的 LED 是入门级的练习。通过使用STM32微控制器,我们可以通过 GPIO 控制来实现Blink LED的功能。本文将介绍如何在STM32微控制器上利用CubeMX和HAL库来实现Blink LED的功能。 一、 硬件准备 首先,确保你有一…

Java连接数据库并查询表中的全部数据

1、导入相关jar包 这里创建简单的maven项目&#xff0c;我们导入相关的jar包 相关依赖&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependenc…

操作系统实验--进程调度算法的模拟代码

代码如下&#xff0c;运行了没问题&#xff01; #include<stdio.h> #include<stdlib.h> #define getpch(type) (type*)malloc(sizeof(type)) struct pcb {char name[10];char state;int nice;int ntime;int rtime;struct pcb* link; }*readyNULL, *p; typedef str…

怎样选择金鸣识别中的输出选项(网页版)?

本操作适合金鸣表格文字识别程序的网页版&#xff08;新版&#xff09;。 表格识别&#xff1a; excel(xlsx)&#xff1a;将需识别的图片转换成编辑的xlsx格式&#xff0c;此格式仅支持excel2007以上版本或wps打开。 excel(xls)&#xff1a;将需识别的图片转换成编辑的xls格式…

虚幻引擎:如何进行关卡切换?

一丶非无缝切换 在切换的时候会先断开连接,等创建好后才会链接,造成体验差 蓝图中用到的节点是 Execute Console Command 二丶无缝切换 链接的时候不会断开连接,中间不会出现卡顿,携带数据转换地图 1.需要在gamemode里面开启无缝漫游,开启之后使用上面的切换方式就可以做到无缝…

‘vite‘ is not recognized as an internal or external command

标题翻译后就是&#xff1a;‘vite‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文 运行一个由 Vite 构建的 Vue3 项目&#xff0c;之前还好好的能正常跑&#xff0c; 但拉取新代码之后再次执行 npm run dev 就提示 ‘vite’ 不是内部或外部命令&#xff0…

C语言--结构体(内容超级详细)

一.前言 通过数据类型来定义一个一个的变量,当需要很多相同类型的变量时有数组。基本数据类型在使用时 很方便,但是利用它们来描述现实世界就显得捉襟见肘。例如需要保存一个班学生的信息”姓名,年龄,分 数”,按照前面的学习需要单独定义三个数组,一个保存姓名,一个保存年龄,一…

台式电脑怎么无损备份迁移系统到新硬盘(使用傲梅,免费的就可以)

文章目录 前言一、想要将源硬盘上的系统原封不动地迁移到新硬盘上二、准备工作2.具体步骤 总结 前言 半路接手公司一台台式电脑&#xff0c;C盘&#xff08;120g&#xff09;爆红&#xff0c;仅剩几个G&#xff0c;优化了几次&#xff0c;无果后。准备换一个大一点的增到500g。…