Android学习笔记(四)
一个应用程序是有很多活动构成的,使用Intent在活动间移动。
Intent分为显式和隐式两种:
1.显示Intent:
新建一个布局文件,命名为second_layout.xml,代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_button_2"
/>
</LinearLayout>
然后新建一个后动SecondActivity继承于Activity,代码如下:
package com.gui.activitytest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class SecondActivity extends Activity {
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.second_layout);
}
}
最后在AndroidManifest.xml中注册SecondActivity,注册代码如下:
<activity
android:name=".SecondActivity">
</activity>
因为SecondActivity不是主活动,所以不需要配置<intent-filter>标签里的内容。
从第一个活动启动第二个活动,需要引入一个Intent。
Intent是Android程序中各组件之间进行交互的一种重要方式,它可以指明当前
* 组件想要执行的动作,也可以在不同的组件之间传递参数。
* 用途:Intent被用于启动活动、启动服务、以及发送广播等场景。
* 用法:Intent大致分为两种:显式Intent和隐式Intent
* 实例:Intent有多个构造函数的重载,其中一个是
* Intent(Context packageContext,Class<?>cls)。
* 这个构造函数接收两个参数:第一个参数Context要求提供一个启动活动
* 上下文,第二个参数Class则是指定想要启动的目标活动。
* 使用:Activity类中提供一个startActivity()方法,这个方法用来启动活动
* 它接收一个Intent参数。将构建好的Intent传入startActivity()方法就可以启动目标活动了
如何启动第二个活动呢?修改FirstActivity中按钮的点击事件,代码如下:
//显式的调用Intent
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
上面代码的含义是首先构建一个Intent,传入FirstActivity.this作为上下文,传入SecondActivity.class作为目标活动。然后通过startActivity()方法
来执行定义的Intent。
2.隐式Intent
隐式Intent不明确指出想要启动哪一个活动,而是指定了一系列抽象的action和category等信息,然后交由系统来判断启动哪一个活动。
通过<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,比如打开AndroidManifest.xml,添加如下代码:
<activity
android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
* 在<action>标签中指明了当前活动可以响应com.example.activitytest.ACTION_START
* 这个action。<category>标签中包含一些附加信息,精确指明了当前的活动能够
* 响应的Intent中还可能带有的category。
* 只有<action>和<category>中的内容同时能够匹配Intent中指定的action和category时这个活动才能响应Intent。
配置好<intent-filter>标签中的内容后,然后修改FirstActivity中按钮的点击事件,代码如下:
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
使用Intent的另一个构造函数,直接将action的字符串传了进去,表明想要启动能够响应com.example.activitytest.ACTION_START这个action的活动。
android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。
每个Intent中只能指定一个action,但却能指定多个category。
比如修改FirstActivity中按钮的点击事件,代码如下:
//隐式使用Intent
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
代码中,可以使用Intent中的addCategory()方法来添加一个category,这里自定义了一个category,值为com.example.activitytest.MY_CATEGORY。
代码中添加category后,必须要在AndroidManifestxml文件中的SecondActivity的<intent-filter>标签中添加代码中所声明的category的内容。
隐式Intent来启动活动有很多用法,使用隐式活动也可以启动其它程序的活动。
比如修改FirstActivity中按钮的点击事件,代码如下所示:
//使用隐式Intent,不仅可以启动自己内部的活动,还可一启动其他程序的活动
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
上述的代码中首先指定Intent的action是Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW。
然后通过Uri.parse()方法,将网址字符串解析成一个Uri对象,在调用Intent的setData()方法将这个Uri对象传递进去。重新运行程序会得到下图的
事例:

setData()方法接收一个Uri对象,主要用于指定当前的Intent正在操作的数据,而这些数据通常都是以字符串的形式传入到Uri.parse()方法中解析产生的。
而且还可以在<intent-filter>标签中再配置一个<data>标签,更精确的指定当前活动能够响应什么类型的数据。
<data>标签中主要可以配置一下的内容:
(1)android:scheme 用于指定数据的协议部分,如上面的http部分。
(2)android:host 用于指定数据的主机名部分,如上面的www.baidu.com部分。
(3)android:port 用于指定数据的端口部分,一般紧随主机名后。
(4)android:path 用于指定主机名和端口之后的部分,如一段网址跟在域名之后的内容。
(5)android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
只有<data>标签中指定的内容和Intent中携带的Data完全一致时,当前活动才可以响应该Intent。
例如,新建一个布局文件,命名为third_layout.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button_3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/app_button_3"
/>
</LinearLayout>
然后新建活动ThirdActivity并继承于Activity,代码如下:
package com.gui.activitytest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
public class ThirdActivity extends Activity {
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.third_layout);
}
}
最后在AndroidManifest.xml中注册ThirdActivity,代码如下:
<activity
android:name=".ThirdActivity" >
<intent-filter >
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity>
上面的代码,在ThirdActivity的<intent-filter>中配置了当前活动能够响应的action是Intent.ACTION_VIEW的常量值,而category是默认值,<data>
标签中通过android:scheme指定了数据的协议必须是http协议,这样的话ThirdActivity应该和浏览器一样,能够响应打开一个网页的Intent了。
重新运行程序,点击FirstActivity中的按钮,结果如下图所示:

从图片中可以看到,系统自动弹出了一个列表,显示了目前能够响应这个Intent的所有程序。
Android学习笔记(四)的更多相关文章
- Android学习笔记四十Preference使用
Preference直译为偏好,博友建议翻译为首选项.一些配置数据,一些我们上次点击选择的内容,我们希望在下次应用调起的时候依旧有效,无须用户再一次进行配置或选择.Android提供preferenc ...
- Android学习笔记四:activity的四种启动模式
Activity有四种启动模式:standard,singleTop,singleTask,singleInstance. 1.standard:标准启动模式 默认模式,这个模式下启动的Activit ...
- android 学习笔记四:控件
1.android:gravity 指定控件的基本位置,比如居中.居右等位置 Top:顶部 bottom:底部 left:居左 right:居右 center_vertical:垂直居中 center ...
- Android 学习笔记四:创建工具栏按钮
原文:http://blog.csdn.net/lihongxun945/article/details/48951199 前面我们已经可以在一个Activity中添加一些按钮之类的组件.由于手机的屏 ...
- android学习笔记四
TextView.Button.CheckBox.RadoiButton.EditView.ImageButton.ToogleButton——略 AnalogClock.DigitalClock = ...
- 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask
目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- 【转】Pro Android学习笔记(十四):用户界面和控制(2):Text类控制
目录(?)[-] TextView 例子1在XML中设置autoLink属性 例子2在代码中设置autoLink属性 EditText AutoCompleteTextView MultiAutoCo ...
- 【转】Pro Android学习笔记(四):了解Android资源(下)
处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...
随机推荐
- apache log4j日志工具使用入门[maven 项目配置]
简单的介绍下Maven项目中有关org.apache.log4j.Logger的使用.[1]首先我们需要找到 org.apache.log4j.Logger的坐标,并配置到POM.xml <de ...
- app——分享wap站,数据处理页面展示
无意中接到了一个小的工作任务:配合手机app端的分享功能做一个wap站,简言之:将手机app端分享的文章id传过来,利用此id再进行一系列的操作,由于文章分为纯文本,图文以及图集的三种类型的文章,因此 ...
- hdu 1032
题目的意思是把输入的i,j 从i到j的每一个数 做循环,输出循环次数最大的值 易错的地方:做循环是容易直接用i进行计算 i=i/2:或i=i*3+1: 这样i的值改变就不能在做下面数的循环 #incl ...
- java_easyui体系之DataGrid(2)[转]
一:简介 在1的基础上添加layout组件.实现通过条件动态的从后台查询数据到前台展示.使用的方式是将查询单独作为一个layout中的一个面板. 二:关键之处 1.效果图: 2.左侧的折叠组件: 折叠 ...
- ASP.NET Web API 入门示例详解
REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...
- javascript的坑
1 for in循环:使用它时,要主要遍历的是所有可枚举的属性(实例以及原型中的属性) function Person(name){ this.name = name; } Person.protot ...
- Echarts源码总括
Echarts采用MVC模型,典型的以数据驱动视图的逻辑. 所有的用于绘图的元素存放于Echarts::Zrender::storage中,所有的动画对象存放于Echarts::Zrender::an ...
- 实现手机扫描二维码页面登录,类似web微信-第二篇,关于二维码的自动生成
转自:http://www.cnblogs.com/fengyun99/p/3541251.html 接上一章,我们已经基本把业务逻辑分析清楚了 下面我们第一步,实现二维码的web动态生成. 页面的二 ...
- 《大象-Think In UML》读书笔记2
什么是UML? UML本身并没有包含软件方法,而仅仅是一种语言,一种建模用的语言,而所有的语言都是基本词汇和语法两部分构成的,UML也不例外.UML中定义了一些建立模型所需要的.表达某种特定含义的基本 ...
- Linux的awk命令
简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...