Android开发入门要点记录:四大组件
cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想都能在IOS中找到影子,所以看起来并不吃力,只求以后看见Android程序能看懂,现在记录下一些要点心得。
提到Android开发,当然要先搞明白它的四大组件分别代表什么,起什么作用:
(1)活动(Activity)
活动是最基本的 Android 应用程序组件,在应用程序中,一个活动通常就是一个单独的用户界面。每一个
活动都被实现为一个独立的类,并且从活动(Activity)基类中继承而来,活动类将会显示由视图(View)控
件组成的用户接口,并对事件(Event)做出响应。大多数的应用程序都会有多个用户界面,因此便会有多个相
应的活动。
Android 的一个活动一般对应界面中的一个屏幕显示,可以理解成一个界面,每一个活动在界面上可以包
含按钮、文本框等多种可视的 UI 元素。
图 1 活动(Activity)的生命周期
(2)广播接收器(BroadcastReceiver)
广播接收器用于让应用程序对一个外部事件做出响应。例如:电话呼入事件、数据网络可用通知或者到了
晚上时进行通知。
广播接收器的生命周期
广播接收器有一个单一的回调方法 onReceive(),当广播消息到达接收器时,Android 将调用这个方法,并 传递给包含在这个消息中的 Intent 对象。
广播接收器只有在这个方法的执行过程中才处于活动状态,当 onReceive()返回后,广播接收器将不再处于 活动状态。广播接收器的功能类似于一个回调函数,只是单次运行时处于活动状态。
(3)服务(Service)
一个服务是一个具有一段较长生命周期但没有用户界面的程序。例如:一个正在从播放列表中播放歌曲的
媒体播放器在后台运行。
图 2 服务(Service)的生命周期
使用 StartService 运行服务的情景:使用这种方法启动服务,服务的 onCreate()和 onStart()这两个方法将被 调用,服务会在后台运行直到退出,退出时将调用 onDestroy()方法。
使用 bindService 运行服务的情景:使用这种方法启动服务,调用者(也就是服务的客户端)将获得和服务 交互的类,通过其调用时服务的相关内容会处于活动状态。
(4)内容提供者(Content Provider)
应用程序能够将它们的数据保存到文件或 SQLite 数据库中,甚至是任何有效的设备中。当需要将数据与其 他的应用共享时,内容提供者将会很有用。一个内容提供者类实现了一组标准的方法,从而能够让其他应用程序 保存或读取此内容提供者处理的各种数据类型。
(5)Intent
在一般情况下,Android 的每一个屏幕基本上就是一个活动(Activity),屏幕之间的切换实际上就是在活动间互 相调用的过程,Android 使用 Intent 完成这个动作。Android 屏幕跳转的关系和方式如下图所示:
事实上,在 Android 中,屏幕使用一个活动来实现,屏幕之间是相互独立的,屏幕之间的跳转关系通过 Intent 来实现。
实例:本示例是一个简单的屏幕之间的跳转,从一个屏幕跳转到另一个屏幕,在启动第二个屏幕后,前一个屏幕消失。
布局资源代码:forward_target.xml 和 forwarding.xml
本示例包含了两个活动,在 UI 上它们就是两个屏幕,分别为跳转的源和目的,因此在 AndroidManifest.xml 中 分别定义。
两个活动的名称分别为 Forwarding 和 ForwardTarget,由于第二个活动没有 intent-filter,因此在程序中只能由第 一个活动来启动。
Forward 程序的运行结果如图所示:
启动第二个活动需要使用 Intent,在其 setClass()函数中设置源和返回的内容,Intent 是 android.content 包中的类, 用于启动活动、服务或者消息接收器。
这里使用的 Intent 的 setClass()的方法的原型如下所示:
第一个参数是当前的上下文类型 Context,因此把当前的活动设置过去即可(Activity 本身继承了 Context),第 二个是 Intent 所包含的 JAVA 类,直接设置 ForwardTarget.class 类即可。
本例中使用了 finish()函数表示当前的活动结束,这样在第二个活动(ForwardTarget)启动时,第一个活动 (Forward)已经不存在了。如果没有调用 finish()函数,第二个活动启动时,第一个活动就处于 OnPause 状态,当第二个活动退出后,第一个活动重新出现,也就是会调用活动的 onResume()函数。
应用程序包含的各个文件
1.Android.mk:统一工程文件,在SDK开发中可以不需要;
2.AndroidManifest.xml:工程描述文件,在其中定义了各种组件;
AndroidManifest.xml 文件是这个 Android 应用程序的工程描述文件,包含了宏观上的内容,如下所示:
注解:
1.xmlns:xmlns是XML Namespaces的缩写,中文名称是XML命名空间。
3.android:layout_gravity(布局-重力)属性,其实就是当前view相对于父视图的位置
android:layout_gravity 可以在各个 View 中使用:top、bottom、left、right、 center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal,这些选项 用于处理竖直和水平方向的对齐方式。
application(表示应用程序)标签中包含了一个 activity(表示活动)。活动是应用程序中的一个组件,一个应用 程序中也可以包含若干个组件。包名定义为 com.example. android.helloactivity,表示将从 src 目录的 com/example/android/helloactivity 中寻找程序中的 Java 源代码。活动名称将被定义为 HelloActivity,表示活动的 代码是上述源代码目录中的HelloActivity.java文件。intent-filter中的内容指定了程序的启动方式,这里category 中的 android.intent.category.LAUNCHER 表示活动将在 Android 的桌面(Android 默认的桌面程序名称也是 LAUNCHER)上出现。
这里指定 application 的 android:label 为"Hello,Activity!",这和桌面图标下面的文字以及活动启动后上面的 标题文字是一致的。本例没有指定图标,所以桌面上的图标使用的是默认图标。
在 AndroidManifest.xml 文件中为一个活动指定 label(标签)和 icon(图标)的方法 方法如下:
android:label 指定为字符串、android:icon 指定为图标后,将使用 res/drawable 中对应名称的图片文件作为图 标(本例中将使用 icon_name.png)。
activity 和 application 都具有 android:label 和 android:icon 等属性,由于活动是程序的单元,且应用可以包 含多个活动,因此程序首先将使用 activity 中的这些标签,如果没有则使用上一级的 application 中标签的定义
3.Java源代码:按照Java包的方式来组织目录结构,包括各个Java类的源代码;
这里的类 HelloActivity 继承实现了 Android 系统 API 提供的活动类(Activity),使用 setContentView(R.layout.hello_activity)指定了当前活动的布局,这里表示将从 res/layout 目录中找到 hello_activity.xml 文件作为本例的布局文件使用。
4.资源文件:包含XML文件、图片、原始数据文件等,其中表示界面情况的布局(Layout)文件比较重要。
hello_activity.xml 是本程序中的布局文件,在 Java 源文件中使用了此文件。本文件在 res/layout 目录中,其
内容如下所示:
在这个布局文件中,只定义了一个 UI 元素——EditText,就是在界面上出现的占据全屏的可编辑文本框。 在这里定义了这个可编辑文本框的初始化字符串为"@string/hello_activity_text_text",这个值在另外的资源文件 中被定义,本例就是 string.xml。
string.xml 是本例中的一个资源文件,其内容如下所示:
这里定义了名称为“hello_activity_text_text”的字符串的内容为 Hello,World!,这就是出现在屏幕上的字 符串。
图 HelloActivity 的运行情况
下面再来个实例,加深理解
在 Android 中,在处理 UI 中的各种元素的时候,两个程序中的要点为: 得到布局文件(XML)中的控件句柄
设置控件的行为
本小节介绍在 Android 中几种基本的程序控制方法,要获得的效果是通过 2 个按钮来控制一个文本框的背
景颜色,其运行结果如图所示:
根据以上的布局文件中定义的两个按钮和一个文本框,这个布局文件被活动设置为 View 后,显示的内容就如上 图所示,只是行为还没有实现。
行为将在源代码文件 TestEvent1.java 中实现,这部分的代码如下所示:
在创建的过程中,通过 findViewById 获得各个屏幕上面的控件(控件)的背景,这里使用的 R.id.button1 等和 布局文件中各个元素的 id 是对应的。实际上,在布局文件中,各个控件即使不写 android:id 这一项也可以正常显示, 但是如果需要在代码中进行控制,则必须设置这一项。
根据 Button 控件的 setOnClickListener()设置了其中的点击行为,这个方法的参数实际上是一个 View.OnClickListener 类型的接口,这个接口需要被实现才能够使用,因此在本例的设置中,实现了其中的 onClick() 函数。这样既可实现点击的时候实现相应的功能,在点击的函数中,将通过 Text 的句柄对其进行控制。
在 Android 的控件使用方面,这两个编程方面要点是:
使用findViewById()获取布局文件(XML)中控件的句柄;
使用setOnXXXListener()设置事件处理函数。
在获取句柄时需要转换成相应的控件类型,findViewById()函数的参数是一个整数,返回值是一个
android.view.View 类型。通过 R.id.XXX 找到布局文件中定义的 ID,然后通过将基础类转换成其实际的类获得真正的
句柄。注意:所转换类必须和布局文件中描述的控件一致。
SetOnXXXListener()等函数是 android.view.View 类的函数,各种控件(包括 Button、EditText)都扩展这个类, 同族的函数包括:
这些函数用于事件处理,它们由程序实现,通过设置这些内容也就设置了控件的行为。这些函数的参数都是所 对应的 android.view.View 类中的方法。
Android 中 UI 基本控制内容:使用 findViewById()联系布局文件中控件和句柄,并通过 OnClickListener()等定制 句柄的行为。
最后还要提一下视图组(ViewGroup)和布局(Layout)的使用
在屏幕中控件的组织上,可以将各个视图(控件)组成一个视图组(ViewGroup),视图组是一个包含了 其他视图的视图。
android.view.ViewGroup 扩展了 android.view.View,它本身也具有 View 的特性,区别仅在于它可以包含其 他的控件。
ViewGroup 视图组具有一系列的扩展者:AdapterView、AbsoluteLayout、FrameLayout、LinearLayout、 RelativeLayout、AdapterView<T extends android.widget.Adapter>。
Android GUI 程序的屏幕体系结构的组织遵循以下原则: 一个屏幕可以包含一个视图;
视图组本身也是一个视图;
视图组可以包含若干个视图。
Android 视图和视图组的关系如图所示:
如图所示,外部最大的框表示整个屏幕,其中包含一个视图组 ViewGroup0,ViewGroup0 包含 3 个子视图, 即 View1、ViewGroup1、ViewGroup2。ViewGroup1 本身也是视图组,以水平布局的方式包含了 View2 和 View3; ViewGroup2 本身也是视图组,以垂直的方式包含了 View4、ViewGroup3 和 ViewGroup4;ViewGroup4 本身也 是视图组,以水平布局的方式包含了 View5 和 View6。
布局(Layout)
布局(Layout)是各个控件在屏幕上的位置关系,视图组的几个扩展类与布局相关。在 Android 中布局通常有以 下几种不同的情况:
FrameLayout(框架布局):系统默认的在屏幕上就有空白区显示它;
LinearLayout(线性布局):让所有的子视图都成为单一的方向,即垂直的或者水平的;
AbsoluteLayout(绝对布局):让子视图使用x/y坐标确定在屏幕上的位置;
RelativeLayout(相对布局):让子视图的位置和其他的视图相关;
TableLayout(表单布局):位置是它的子视图的行或列。
FrameLayout、LinearLayout、RelativeLayout、AbsoluteLayout、TableLayout 都是扩展了 ViewGroup 的类,因此
这些视图可以用于包含其他的控件,并可以控制其他的控件的位置关系。
布局的内容一般通过在布局文件中控制即可,在控制布局时 android:layout_width 和 android:layout_height 等表示
尺寸属性,除了使用实际的尺寸值外,还有两个常用的选项:
"fill_parent":表示能填满父视图的最大尺寸;
"wrap_content":表示仅包裹子内容的最小尺寸。
这两个值既可以在视图组中使用,也可以在普通视图中使用,如果在视图中使用"wrap_content",表示包裹其中
的内容,例如按钮需要包裹上面的文字。
由于Layout是视图组的子类,所以实际应用中通常都是使用Layout控制一组视图
Android开发入门要点记录:四大组件的更多相关文章
- 【Android开发艺术探索】四大组件的工作过程
个人博客 http://www.milovetingting.cn 四大组件的工作过程 四大组件:Activity.Service.BroadcastReceiver.ContentProvider ...
- [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解
原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...
- [译]:Xamarin.Android开发入门——Hello,Android深入理解
返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...
- [译]:Xamarin.Android开发入门——Hello,Android快速上手
返回索引目录 原文链接:Hello, Android_Quickstart. 译文链接:Xamarin.Android开发入门--Hello,Android快速上手 本部分介绍利用Xamarin开发A ...
- 教我徒弟Android开发入门(一)
前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...
- Android开发入门经典【申明:来源于网络】
Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view
- Android开发入门
教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...
- Android学习笔记五:四大组件(转)
转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...
- android开发入门经验 ADT Bundle环境搭建
现在有许多做开发的转做移动端开发,做J2EE的转做Android开发,我也把自己的一些入门经验与大家分享一下,希望能给你带来帮助. 工具/原料 JDK,ADT,JAVA 方法/步骤 开发工具的准备 ...
随机推荐
- C# SQLite数据库操作
WinCE项目开发 VS2008 自己写的SQLite数据库管理类代码如下: SQLiteManager.cs using System.Data; using System.Data.SQLit ...
- js函数事件对象
每个函数都有4个默认对象 arguments 保存着实际传入的参数,集合列表 return 有两个功能,打断函数和返回函数值 this 谁调用的函数,this就是谁 event 事件对象 事件 box ...
- React Native基础概念和基础认识
学习地址:https://github.com/vczero/react-native-lesson 当我们初始化一个RN项目的时候主要的是index.ios.js文件和index.android.j ...
- python 生成元组
#create a tuple l = [(,), (,), (,)] print(list(zip(*l)))
- win10 鼠标指针
https://www.ithome.com/html/zhuti/26449.htm
- Linux中CentOS6.5 64位 系统下安装docker步骤
CentOS6.5 64位 (docker目前仅支持64位)内核必须在3.10及以上 1. uname -r 查看内核版本 2. 升级内核到3.10版本(带aufs模块) cd /etc ...
- CSS实现和选择器
CSS实现和选择器 本课内容: 一.实现CSS四种方式 1,每个html标签中都有一个style样式属性,该属性的值就是css代码.(针对一个标签)2,使用style标签的方式. 一般都定义在head ...
- 手动添加 launcher 到 Ubuntu Unity
本来,启动程序之后,在左边的launcher bar点右键,[Lock to Launcher]就可以的. 但是,有时候因为某种原因,需要手工添加. 这时候,就要参考下面的文章了 http://ask ...
- English trip -- VC(情景课)4 B Parts of the body 身体部位
xu言: ... Words eye 读音同 I 眼睛 nose 鼻子 ear 耳朵 tooth 牙齿 mouth 嘴 hair 头发 eyebrow 眉毛 cheek 脸颊 n ...
- Java中/r和/n的区别
/n换行符,效果是新换一行,光标在原有位置下一行 /r回车符,效果是光标来到下一行行首