Android系统基础与常用布局
Android学习笔记
一、Android系统简介
1.1 体系架构
采用了分层的架构,如下图
1.1.2 Linux内核
Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功 能,例如线程和低层内存管理。使用 Linux 内核可让 Android 利用主要安全功能,并且允许设备 制造商为著名的内核开发硬件驱动程序
1.1.3 Android Runtime
对于运行 Android 5.0(API 级别 21)或更高版本的设备,每个应用都在其自己的进程中运行,并 且有其自己的 Android Runtime (ART) 实例。ART 编写为通过执行 DEX 文件在低内存设备上运行 多个虚拟机,DEX 文件是一种专为 Android 设计的字节码格式,经过优化,使用的内存很少。编 译工具链(例如 Jack)将 Java 源代码编译为 DEX 字节码,使其可在 Android 平台上运行
1.1.4 原生C/C++库
许多核心 Android 系统组件和服务(例如 ART 和 HAL)构建自原生代码,需要以 C 和 C++ 编写 的原生库。Android 平台提供 Java 框架 API 以向应用显示其中部分原生库的功能。例如,您可以 通过 Android 框架的 Java OpenGL API 访问 OpenGL ES,以支持在应用中绘制和操作 2D 和 3D 图形。如果开发的是需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问某 些原生平台库
1.1.5 Java API框架
您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。这些 API 形成创建 Android 应 用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用包括以下组件和服务:
- 丰富、可扩展的视图系统,可用以构建应用的 UI,包括列表、网格、文本框、按钮甚 至可嵌入的网络浏览器
- 资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件
- 通知管理器,可让所有应用在状态栏中显示自定义提醒
- Activity 管理器,用于管理应用的生命周期,提供常见的导航返回栈
- 内容提供程序,可让应用访问其他应用(例如“联系人”应用)中的数据或者共享其自己 的数据 开发者可以完全访问 Android 系统应用使用的框架 API
1.1.6 系统应用
Android 随附一套用于电子邮件、短信、日历、互联网浏览和联系人等的核心应用。平台随附的应 用与用户可以选择安装的应用一样,没有特殊状态。因此第三方应用可成为用户的默认网络浏览 器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。系统应用可用作用 户的应用,以及提供开发者可从其自己的应用访问的主要功能。例如,如果您的应用要发短信,您 无需自己构建该功能,可以改为调用已安装的短信应用向您指定的接收者发送消息。
1.2 应用组件
1.2.1Android开发四大组件
- 活动 (Activity)
- Android 中,Activity是所有程序的根本,所有程序的流程都运行在Activity 之中,Activity可 以算是开发者遇到的最频繁,也是Android 当中最基本的模块之一。
- 一般一个Android 应用是由多个Activity 组成的。这多个Activity 之间Android的应用 可以进 行相互跳转。
- 服务(Service)
- Service 是android 系统中的一种组件,它跟Activity 的级别差不多,但是他不能自己运行, 只能后台运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。
- 举个例子,打开一个音乐播放器的程序,这个时候若想上网了,那么,打开Android浏览 器,这个时候虽然已经进入了浏览器这个程序,但是,歌曲播放并没有停止,而是在后台继 续一首接着一首的播放。其实这个播放就是由播放音乐的Service进行控制。
- 广播接收器 (BroadcastReceiver )
- 在Android 中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。
- 内容提供者 (Content Provider )
- Content Provider 是Android提供的第三方应用数据的访问方案
- 在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据 库、文件等内容,都是不允许其他直接访问的。Android当然不会真的把每个应用都做成一 座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。
1.3 平台优势
1.3.1 开放性
- 在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android 联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平 台也将很快走向成熟。
- 开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者 来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以 用更低的价位购得心仪的手机。
1.3.2 丰富的硬件
- 在优势方面,Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到Android 联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平 台也将很快走向成熟。 开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者 来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以 用更低的价位购得心仪的手机。
1.3.3 方便开发
- Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可 想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏 如何控制正是留给Android难题之一。
1.3.4 Google应用
- 在互联网的Google已经走过10年度历史,从搜索巨人到全面的互联网渗透,Google服务如地图、 邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的 Google服务。
二、Android UI开发
2.1 UI定义
用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换 的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。
软件设计可分为两个部分:编码设计与UI设计。
Android应用界面包含用户可查看并与之交互的所有内容。Android 提供丰富多样的预置 UI 组 件,例如结构化布局对象和 UI 控件,您可以利用这些组件为您的应用构建图形界面。
Android 还 提供其他界面模块,用于构建特殊界面,例如对话框、通知和菜单。
2.2 布局
布局(layout)可定义应用中的界面结构(例如 Activity 的界面结构)。布局中的所有元素均使用 View 和 ViewGroup 对象的层次结构进行构建。View 通常绘制用户可查看并进行交互的内容。然而, ViewGroup 是不可见容器,用于定义 View 和其他 ViewGroup 对象的布局结构。
2.2.1 布局的结构
- 定义界面布局的视图层次结构图示:
View 对象通常称为“微件”,可以是众多子类之一,例如 Button 或 TextView 。
ViewGroup 对象通常称为“布局”,可以是提供其他布局结构的众多类型之一,例如 LinearLayout 或 ConstraintLayout 。
2.2.2 声明布局
- 在 XML 中声明界面元素,Android 提供对应 View 类及其子类的简明 XML 词汇,如用于微件和布 局的词汇。 也可使用 Android Studio 的 Layout Editor,并采用拖放界面来构建 XML 布局。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.2.3 编写XML
- 利用 Android 的 XML 词汇,按照在 HTML 中创建包含一系列嵌套元素的网页的相同方式快速设计 UI 布局及其包含的屏幕元素
- 每个布局文件都必须只包含一个根元素,并且该元素必须是视图对象或 ViewGroup 对象
- 定义根元素后,可以子元素的形式添加其他布局对象或控件,从而逐步构建定义布局的视图层次结构
- 在 XML 中声明布局后,以 .xml 扩展名将文件保存在Android 项目的 res/layout/ 目录中
2.2.4 加载XML资源
- 当编译应用时,系统会将每个 XML 布局文件编译成 View 资源。在 ``Activity.onCreate()
回调 内,通过调用
setContentView(),并以
R.layout.layout_file_name` 形式向应用代码传 递布局资源的引用 ,加载应用代码中的布局资源。
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
2.2.5 内边距和外边距
一般只有字体大小用sp,其余均用dp。
2.3 常用布局
Android七大布局:LinearLayout(线性布局)、TableLayout(表格布局)、RelativeLayout(相对布局)、FrameLayout(层布局)、AbsoluteLayout(绝对布局)、GridLayout(网格布局)、ConstraintLayout(约束布局)。
继承关系:
2.3.1 线性布局 - LinearLayout
LinearLayout
是一个视图容器,用于使所有子视图在单个方向(垂直或水平)保持对齐。您可 使用android:orientation
属性指定布局方向。android:orientation="horizontal"
水平对齐
android:orientation="vertical"
android:gravity:内部控件对齐方式,常用属性值:center、center_vertical、center_horizontal、top、bottom、left、right等。android:gravity在布局组件 RelativeLayout、TableLayout 中也有使用,在 FrameLayout、AbsoluteLayout 则没有这个属性。
center:居中显示,这里并不是表示显示在 LinearLayout 的中心,当 LinearLayout 线性方向为垂直方向时,center 表示水平居中,但是并不能垂直居中,此时等同于 center_horizontal 的作用;同样当线性方向为水平方向时,center 表示垂直居中,等同于 center_vertical。top、bottom、left、right 顾名思义为内部控件居顶、低、左、右布局。
这里要与 android:layout_gravity 区分开,layout_gravity 是用来设置自身相对于父元素的布局。
android:layout_weight:权重,用来分配当前控件在剩余空间的大小。使用权重一般要把分配该权重方向的长度设置为零,比如在水平方向分配权重,就把 width 设置为零。
2.3.2 相对布局 - RelativeLayout
相对布局 :子视图可通过相应的布局属性,设定相对于另一个兄弟视图或父视图容器的相对位置
属性说明:
相对于兄弟元素
属性名称 属性含义 android:layout_below=“@id/aaa” 在指定View的下方 android:layout_above=“@id/aaa” 在指定View的上方 android:layout_toLeftOf=“@id/aaa” 在指定View的左边 android:layout_toRightOf=“@id/aaa” 在指定View的右边 android:layout_alignTop=“@id/aaa” 与指定View的上边界一致 android:layout_alignBottom=“@id/aaa” 与指定View下边界一致 android:layout_alignLeft=“@id/aaa” 与指定View的左边界一致 android:layout_alignRight=“@id/aaa” 与指定View的右边界一致 相对于父元素
属性名称 属性含义 android:layout_alignParentLeft=“true” 在父元素内左边 android:layout_alignParentRight=“true” 在父元素内右边 android:layout_alignParentTop=“true” 在父元素内顶部 android:layout_alignParentBottom=“true” 在父元素内底部 对齐方式
属性名称 属性含义 android:layout_centerInParent=“true” 居中布局 android:layout_centerVertical=“true” 垂直居中布局 android:layout_centerHorizontal=“true” 水平居中布局 间隔
属性名称 属性含义 android:layout_marginBottom=“” 离某元素底边缘的距离 android:layout_marginLeft=“” 离某元素左边缘的距离 android:layout_marginRight =“” 离某元素右边缘的距离 android:layout_marginTop=“” 离某元素上边缘的距离 android:layout_paddingBottom=“” 往内部元素底边缘填充距离 android:layout_paddingLeft=“” 往内部元素左边缘填充距离 android:layout_paddingRight =“” 往内部元素右边缘填充距离 android:layout_paddingTop=“” 往内部元素右边缘填充距离
2.3.3 帧布局 - FrameLayout
- 最简单的一种布局,没有任何定位方式,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角,帧布局的大小由控件中最大的子控件决定,如果控件的大小一样大的话,那么同一时 刻就只能看到最上面的那个组件,后续添加的控件会覆盖前一个。
2.3.4 约束布局 - ConstraintLayout
- 传统的Android开发当中,界面基本都是靠编写XML代码完成的,虽然Android Studio也支持可视化的方式来编写界面,但是操作起来并不方便,我也一直都不推荐使用可视化的方式来编写Android应用程序的界面。而ConstraintLayout就是为了解决这一现状而出现的。它和传统编写界面的方式恰恰相反,ConstraintLayout非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android Studio根据我们的操作自动生成的。另外,ConstraintLayout 还有一个优点,它可以有效地解决布局嵌套过多的问题。我们平时编写界面,复杂的布局总会伴随着多层的嵌套,而嵌套越多,程序的性能也就越差。ConstraintLayout则是使用约束的方式来指定各个控件的位置和关系的,它有点类似于 RelativeLayout,但远比RelativeLayout要更强大。
属性名称 | 属性含义 |
---|---|
layout_constraintTop_toTopOf | 将所需视图的顶部与另一个视图的顶部对齐 |
layout_constraintTop_toBottomOf | 将所需视图的顶部与另一个视图的底部对齐 |
layout_constraintBottom_toTopOf | 将所需视图的底部与另一个视图的顶部对齐 |
layout_constraintBottom_toBottomOf | 将所需视图的底部与另一个视图的底部对齐 |
layout_constraintLeft_toLeftOf | 将所需视图的左边与另一个视图的左边对齐 |
layout_constraintLeft_toRightOf | 将所需视图的左边与另一个视图的右边对齐 |
layout_constraintRight_toLeftOf | 将所需视图的右边与另一个视图的左边对齐 |
layout_constraintRight_toRightOf | 将所需视图的右边与另一个视图的右边对 |
Android系统基础与常用布局相关推荐
- Android系统基础介绍
Android系统基础介绍 Android系统发展史 Android系统从1.5版本迭代到现在10.0 需要注意的几个版本: 5.0 界面设计技术发生变革,采用全新的MaterialDesign界面, ...
- android界面布局题,【填空题】Android 系统中, 用于定义布局显示在界面上的风格。...
[填空题]Android 系统中, 用于定义布局显示在界面上的风格. 更多相关问题 [37]A.anotherB.each otherC.the otherD.one another Tabor ma ...
- android 按钮顶级效果_人人都可写代码-Android零基础编程-相对布局11
欢迎来到人人都可写代码,大家好,我是杨晓华,今天我们的课程内容是:Android界面布局中的相对布局. 1.RelativeLayout的概述 (1) RelativeLayout是一个允许子视图相对 ...
- 《Android Studio应用开发实战详解》——第1章,第1.2节Android系统基础
本节书摘来自异步社区<Android Studio应用开发实战详解>一书中的第1章,第1.2节Android系统基础,作者 王翠萍,更多章节内容可以访问云栖社区"异步社区&quo ...
- android系统知识,Android系统基础知识百科
Android系统基础知识百科 2015-12-16 17:58:31 954浏览 Android系统作为一款功能强大的移动计算平台,在保持开放性的同时,必须提供强健的安全保障.Android的系统安 ...
- Android系统基础架构
一.体系架构 虽然Android系统非常庞大且错综复杂,需要具备全面的技术栈,但整体架构设计清晰.Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库.虚拟机 ...
- android开发基础1-界面布局(明日科技教程)
用户界面设计 View view:可以理解为视图,占据屏幕上的一块矩形区域,负责提供组建绘制和事件处理的方法 如果把android界面比喻成一个窗口,则每个view都是一块玻璃.一般是使用view类的 ...
- android系统应用开发常用的adb命令个人收藏集锦(不断更新)
adb查看android设备内存使用情况 1.查看设备节点内存adb shell df 2.查看磁盘内存和运行内存:adb shell free 3.查看内存详细数据adb shell cat /pr ...
- Android 学习总结--六大常用布局
目录 一.相对布局(RelativeLayout) 二.线性布局(LinearLayout) 三.网格布局(GridLayout) 四.表格布局(TableLayout) 五.帧布局(FrameLay ...
最新文章
- 基于深度学习的特征提取和匹配
- TFOD:基于TFOD API的官方模型案例对图片进行目标检测
- 创建一个catkin工作空间
- React中级学习(第二天)
- hadoop--Shuffle机制
- vue请求数据传给子组件_vue.js基础,父组件如何向子组件传递数据「607」
- 天呐,这群“员工”的业务能力太强了
- linux内存管理之malloc
- headfirstjava_1.BreakingTheSurface
- 2017 Postgres大象会 TBase可靠性探究ppt
- python抓包超星网课试卷_2020网络数据采集与Python爬虫【带实验】高校邦网课答案...
- 语音社交系统源码中实时音频常见问题分析和解决:延时和抖动
- 巧用 CSS 实现炫彩三角边框动画
- 鸿蒙os系统使用技巧,鸿蒙OS 应用权限管理
- python scipy拟合曲线optimize.curve_fit 50例
- codevs5172 装病的聚聚 (最短路spfa的延伸应用)(对三角不等式的深入理解)--by lethalboy
- java中String xx xx_Java中常用String方法
- wincc实现手机APP远程监控
- Mac安装ps软件,提示Error解决方法
- 【AI系列文章推送一】什么是人工智能?
热门文章
- 炸裂 JavaWeb网上电商系统(附源码、项目讲解)
- 「元旦快乐 」能力上新 氚云
- 规则引擎实战篇-------银行贷款业务处理2
- 李开复“埋雷”,蚂蚁拆弹
- 美容仪器设计市场是什么行情?
- 搞懂平衡二叉树的左旋右旋双旋(Java实现)
- mysql删除表里面姓王的人_MySQL 删除数据表_mysql删除数据表命令_DROP TABLE table_name...
- 错误:000732:数据集不存在或不受支持
- 背上“租金贷”包袱,青客公寓还能“跑”吗?
- pve和pvp是什么意思(穿越pve和pvp是什么意思)