活动的使用how to build and use an activity
来源:互联网 发布:一年php工资7千 编辑:程序博客网 时间:2024/06/05 06:27
这篇文章,主要活动的应用的概述,详细内容将在之后补充。
活动的使用(how tobuild and use an activity)
1. 创建一个活动
首先,我们要创建一个Activity的子类或继承一个子类作为我们的活动。在这个新的活动中,我们必须要实现几个回调函数(将在它的生命周期中被系统调用,比如created,stopped.resumed,destoyed)
2. 其中,最重要的几个回调分别是:
onCreate():你必须实现这个函数,因为系统会在构造活动的时候调用这个函数。而且在你实现的时候,你需要初始化活动中的组件。最关键的是,你必须用setContentView()这个方法去为你的活动用户界面定义布局。
onPause():当用户离开活动时,这个方法会被第一个调用。(可能这个活动还没被摧毁)。一般,在这方法中,我们应该保存一些当前用户的信息。(应为我们为您可能不再回到这个活动了。)
3. 除此之外,还有几个生命周期的回调函数。所有这些方法将在之后再讨论。
实现用户界面
活动中的用户界面是有许多个对象组成(这些对象继承自View类)。每个对象都以矩形的形状在活动的窗口上占据一定空间,并与用户交互。比如说,按钮,它在用户点击时,可以触发一个动作。
Android提供许多已经做好的视图(views)来帮助你去设计和组织你的布局。“Widgets”就是一组提供 visual (and interactive) 的视图,比如button, text field,checkbox, image。
“Layout”是继承自ViewGroup的视图,可以为子视图提供唯一的布局模块,比如有linear layout,grid layout,relative layout.你也可以自己继承View和ViewGroup类来构建自己的组件和布局,然后将它们应用到自己的活动布局中。
目前,我们通过定义XML layout file文件来定义布局,然后将其保存在应用资源中(application resources)。通过这种方式,我们可以将界面布局的设计和源代码分隔开来。
然后,我们在XML中设计好自己满意的布局,再在onCreate()方法中用setContentView()加载这个XML布局(通过一个资源序号resource ID for the layout)。同时,你也可以自己定义视图并使用。
关于如何创建一个用户界面的详细信息,看《用户界面》。
在清单(manifest)中定义活动
我们必须在清单中定义我们的活动,为了它能被系统访问到。
1. 首先,打开清单文件(manifest file)
然后,在里面添加<activity>作为子<application>的子节点。如:<manifest ... > <application ... > <activity android:name=".ExampleActivity" /> ... </application ... > ...</manifest >
2. 在这个节点中,我们还可以定义许多属性,比如活动的标签,图标,主题类型。android:name这个是唯一必填的属性,它清楚的表明的这个活动的类名。一旦,我们发布我们的应用,就不应该修改这个属性。因为如果你这么做了,你就可能打破一些功能,就可能出现应用短路。
在<acitivity>的引用中继续了解它的详细信息。
使用intent-filter
在<activity>节点中,我们还可以指明intent-filters来定义其他应用组件如何启动它。
当我们通过Android SDK工具创建一个应用的时候,根活动就会自动的被创建,并且在清单中自动生成一个<activity>节点,包括<intent-filter>
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
这些信息到底是什么意思呢?
首先,<action>节点指明这是个活动是应用的主(main)入口。android.intent.action.MAIN
<category>节点指明这个活动应该被列入系统应用启动(为了允许用户去启动这个活动)。
如果我们只是在应用中自我调用,而不允许其他应用启动这些活动,那么我们就不需要加<intentfilter>.只需要一个主活动有一个main action和 launcher gategory,就像上面的例子中一样。
如果我们的活动想回应其他应用的请求,那么我们就必须加intent-filter了。在<action>和<category>中我们要指明它要回应哪种请求。
对于更详细的内容,可以查看 《Intents 和Intent Filters》
启动一个活动
我们可以在一个活动中启动另外一个活动。通过调用startActivity(),传入一个Intent参数,指明你要启动哪一个活动。在Intent中,我们可以指明我要启动具体哪一个活动,或者哪一类活动。(系统会为你选择合适的活动,甚至是其他的应用)Intent还可以携带一些数据,传递给启动的活动。
在我们自己的应用中,我去启动一个已知的活动时,可以这样:
Intent intent = new Intent(this, SignInActivity.class);startActivity(intent);
然而,如果我们要去启动一个来自其他应用的活动时,(比如发邮件,发短信等等)我们可以这样:
Intent intent = new Intent(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);startActivity(intent);
首先要构造一个Intent,来描述要执行的动作,然后系统将启动合适的活动。如果有多个活动匹配这个intent,那么用户就可以自己选择。
启动一个活动并返回
有时候,我们想在A活动接收B活动的结果(A活动启动了B活动,B结束后,A想获得一个结果)。在这种情况,就可以调用startActivityForResult()这个方法(代替startActivity()),并实现onActivityResult()回调。当前一个活动结束后,它将返回一个intent结果到onActivityResult()方法。
举个例子,可能你想要用户选择一个联系人,因此你的活动要能够处理关于联系人的信息。
以下就是一个例子:
private void pickContact() {
// Create an intent to "pick" a contact, as defined by thecontent provider URI
Intent intent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(intent,PICK_CONTACT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
// If the request went well (OK) and the request was PICK_CONTACT_REQUEST
if (resultCode== Activity.RESULT_OK&& requestCode == PICK_CONTACT_REQUEST){
// Perform a query to the contact's contentprovider for the contact's name
Cursor cursor =getContentResolver().query(data.getData(),
new String[]{Contacts.DISPLAY_NAME},null, null, null);
if (cursor.moveToFirst()){ // True if thecursor is not empty
int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
String name = cursor.getString(columnIndex);
// Do somethingwith the selected contact's name...
}
}
}
以上内容为我对官档的个人理解,如有错误欢迎大家在评论区指出!
- 活动的使用how to build and use an activity
- How to build and use a Flash DLL
- How to Build and Use libnetfilter_queue for Android
- how to use automake to build files
- librec的使用 how to use librec
- How to use Vim like an IDE
- How to use an Elm327 Scan Tool
- How to Build an SMS Service
- [Backup] How to build and use Pansenti / meta-pansenti for Gumstix Overo Ironstorm
- How to build & install GLFW 3 and use it in a Linux project
- EOF的定义与有效使用(Definition of EOF and how to use it effectively )
- How to Build An Action and Emotion Database for Simulated Driver’s State Recognition
- How to Make an Activity Fullscreen
- How to Make an Activity Fullscreen
- How to Make an Activity Fullscreen
- How to: Use Expression Trees to Build Dynamic Queries
- How to use ppt to make an effective presentation
- HOW to Use QP_PREQ_PUB.PRICE_REQUEST API to Price an Item
- POJ 2400 Supervisor, Supervisee KM求最小权
- MyEclipse 2017 CI 7安装与激活
- Opencv学习笔记之 视频
- java里面强引用和弱引用
- Spring Boot 学习笔记(三)
- 活动的使用how to build and use an activity
- 删除当前数据库所有的表 过程
- 【linux】串口编程(一)——配置串口
- Centos 7.x yum安装php5.6.X(最新版)
- 简单实现ArrayList功能
- 搜索系统11:协同过滤的数据源和遗留问题
- 到底什么是故事点(Story Point)?
- TensorFlow安装(安装bazel,配置TensorFlow编译环境,利用源码安装TensorFlow)
- 分享三种CSV转PDF方法