Android核心基础(快速入门)
一、Android相关背景知识
二、Android系统体系结构
Android的系统架构采用了分层的设计,分为四层,从低层到高层如下:
(内核层)Linux Kerner 内核
Android的核心系统服务依赖于Linux内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。
Linux 内核也同时作为硬件和软件栈之间的抽象层。
(系统运行库层)Libraries 核心代码库 Android Runntime 运行时
该层主要分为Libaries程序库和Android Runtime库
1. 程序层
Android 包含一些C/C++库,这些库能被Android 系统中不同的组件使用。
它们通过Android 应用程序框架为开发者提供服务。以下是一些核心库:
1.SurfaceManager:对显示子系统的管理,并且为多个应用程序提供了2D 和3D 图层的无缝融合。
2.媒体库:该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件,编码格式包括:MPEG4, H.264, MP3, AAC, AMR, JPG, PNG。
3.SQLite: 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
4.OpenGL ES:该库可以使用硬件3D 加速(如果可用)或者使用高度优化的3D软加速。
5.FreeType:位图(bitmap)和矢量(vector)字体显示。
6.WebKit:一个最新的web浏览器引擎,支持Android浏览器和一个可嵌入的web视(WebView)。
7.SGL:底层的2D 图形引擎
8.SSL:SSL(Secure Sockets Layer 安全套接层),在传输层对网络连接进行加密,为网络通信提供安全及数据完整性的一种安全协议。
9.Libc:一个标准C 系统函数库( libc )。
2.Android Runtime 库1.Core Libraries:该核心库提供了Java 编程语言核心库的大多数功能。 2.Dalvik Virtual Machine:每一个Android 应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik 虚拟机实例。 3.Dalvik: 虚拟机依赖于linux 内核的一些功能,比如线程机制和底层内存管理机制。
(应用程序框架层)Application Framework 应用程序框架层
Android 系统中的每个应用都依赖于该框架提供的一系列服务和系统,其中包括:
1.活动管理器( Activity Manager) :用来管理应用程序生命周期并提供常用的导航回退功能。
2.丰富而又可扩展的视图(Views):可以用来构建应用程序, 它包括列表(lists),网(grids)文本框(textboxes),按钮(buttons),甚至可嵌入的web 浏览器。
3.内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
4.资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串,图形,和布局文件( layoutfiles )。
5.通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
(应用层)Application 应用程序层
包括系统内置的应用和用户自己安装的应用,它们都是使用Java语言编写的。
三、Android工程目录结构
1.❤src:Java源代码存放目录
2.❤gen目录:自动生成的文件夹,里面保存的是res资源文件的引用。(✿ R.java、BuildConfig.java)
3.assets文件夹:存放资源文件,这些资源文件会被原封不动的打包到apk中。
4.bin目录:编写生成的临时文件或二进制文件
5.Libs文件夹:代码的第三方Jar包,会自动的被添加到Android Dependencies目录下。
6.❤res目录:
drawable-ldpi文件夹 low 存放低分辨率小图
drawable-mdpi文件夹 middle 存放中等分辨率图片
drawable-hdpi文件夹 high 存放高分辨率图片
drawable-xhdpi文件夹 存放加大高分辨率图片
drawable-xxhdpi文件夹 存放加加大高分辨率图片
layout文件夹:存放XML文件编写的布局 ✿
values文件夹:存放应用使用到的各种数据类型,不同的数据类型存放在不同文件中,
比如:
Strings.xml 定义字符串和数值
Colors.xml 定义颜色和颜色字符串数值
dimens.xml 定义尺寸数据
styles.xml 定义样式
7.❤AndroidManifest.xml 项目清单文件:用来配置四大组件、声明权限,配置应用版本等参数
四、Android应用程序开发流程
❤1.创建项目,在Res目录下的layout文件下的activity_man.xml中编写布局
❤2.在src目录下的MaiActivity.java文件,编写代码findViewById()找到关心控件
❤3.设置业务逻辑 例如:按钮的点击事件处理
❤4.检查是否需要添加项目清单文件的权限
五、常见的布局方式
线性布局LinearLayout
是根据指定朝向orientation,水平Horizontal,或者垂直Vertical,方向排列的布局 特点:可以给子控件按照权重weight属性分配空间 ---------------------------- 设置布局里面容器的对齐方式 android:gravity setGravity(int) ---------------------------- 设置布局里面排列方式 android:orientation setOrientation horizontal 水平排列 vertical 垂直排列 ---------------------------- 注意事项: android:layout_gravity 子元素在LinearLayout里面的对齐方式 android:layout_weight 子元素在LinearLayout里面所占有的权重 ----------------------------- 说明: android:gravity 一般用在布局文件上面,表示布局文件里面的控件的显示效果 android:layout_gravity 一般用在控件上面,只表示该控件的显示效果 ----------------------------------
相对布局RelativeLayout
允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一 特点:以某个控件为参考,来放置其他控件的位置 --------------------------------------------- android:layout_toRightOf 控制控件的 右侧 android:layout_toLeftOf 控制控件的 左侧 android:layout_above 控制控件的 上方 android:layout_below 控制控件的 下方 --------------------------------------------- android:layout_alignTop 控制控件的 上边界对齐 android:layout_alignBottom 控制控件的 下边界对齐 android:layout_alignLeft 控制控件的 左边界对齐 android:layout_alignRight 控制控件的 右边界对齐 --------------------------------------------- android:layout_centerHorizontal 控制是否位于 水平居中位置 android:layout_centerVertical 控制是否位于 垂直居中位置 android:layout_centerInParent 控制是否位于 中央位置 android:layout_alignParentBottom 控制是否位于 底端对齐 android:layout_alignPreantLeft 控制是否位于 左边对齐 android:layout_alignPreantRight 控制是否位于 右边对齐 android:layout_alignPreantTop 控制是否位于 顶端对齐 ---------------------------------------------
表格布局TableLayout(被GridView替代)
里面放<TableRow>标签表示一行,里面的子节点可以使用weight属性 注意:TableLayout 里面有个 TableRow用于行数的控制 ------------------------------------------ 序列号从0开始,多个序列用逗号分隔 android:collapseColumns="0" 隐藏的列 序列号 android:shrinkColums ="1,2" 收缩的列 android:stretchColums ="3" 拉伸的列
帧布局FrameLayout
可以理解为div盒子,一层覆盖一层,后面的可以覆盖前面的 子节点可以用Layout_gravity属性,控制自己的位置,也可以用gravity 控制子节点的内容显示位置,比如(TextView中文本显示的位置) android:foreground 设置帧布局容器的前景图像 android:foregroundGravty 定义绘制前景图像的 gravity 属性 --------------------------------- 注意: android:width 控件的宽度 android:heigth 控件的高度 android:layout_width 控件里面内容的宽度 android:layout_heigth 控件里面内容的高度
绝对布局AbsoluteLayout(被Google废除)
废弃,不推荐使用。在一些平板固定的屏幕上可能会使用到该布局。 layout_x 该控件的X轴 坐标 layout_y 该控件的Y轴 坐标
android:layout_gravity 与 android:gravity 的区别
gravity 在初中物理当中是重力加速度g g=9.8N/kg (通常情况下:计算方便为10N/kg) android:layout_gravity 表示的是当前的View或者ViewGroup在 ViewGroup当中的位置 android:gravity 表示的是当前的 View 或者 ViewGroup的内容所在的位置
控件属性解释:
android:layout_width 或 android:layout_height属性有三个固定的常量值:
wrap_content 包裹类型,控件内容有多大就尽量给分配多大的空间;
match_parent 是填充父控件类型,使用该类型的控件尺寸跟父控件的尺寸保持一样大。
fill_parent 是填充父控件类型,已经被废弃,使用match_parent代替;
控件的尺寸除了这三种常量外还可以输入自定的尺寸
android:id="@+id/et_num"属性是为了给每一个控件分配一个编号id,
该id会记录在R类的子类id类中,这样方便于我们在代码中通过R.id 获取到控件的引用。
“@”后面跟的“+”号意思是该id对应的值et_num需要新添加到R类中,而不是引用该值。
Button 按钮
<Button android:id="@+id/bt_call" //给控件起一个名字,供findViewById使用 android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" //水平居中 android:layout_centerVertical="true" //垂直居中 android:text="呼叫110" />
TextView 显示文本的控件
<TextView android:layout_width="300px" android:layout_height="300px" android:layout_gravity="center" android:background="#ff0000" //背景颜色 />
ImageView 显示图片的控件
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/qq" //设置图片资源 />
EditText 文本输入框
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content" />