======================
2015.11.3 上午
================
Activity(活动)
活动窗口可以包含多个用户界面的组件,主要用于用户交互。
一、活动的基本用法:
在创建活动时不再勾选CreateActivity
*关闭之前的项目
1.手动创建活动
1)新建包:com.zpark.activity
2)在包中创建一个类:MainActivity.java
这个类需要继承 android.app.Activity
3)覆盖onCreate方法
4)调用父类的onCreate方法进行初始化
2.创建和加载布局文件
每一个活动一般都会使用一个布局文件来作为活动的框架,在布局文件中可以定义一些控件。
1)创建布局文件:在res目录中--->layout -->new--Android XML File --->输入文件名
2)在布局文件中定义一个Button控件:
<Button
android:id="@+id/button_1" --给控件定义唯一标识符 @+id/定义id
android:layout_width="match_parent" --指定控件的宽度 match_parent 与父元素宽度一致
android:layout_height="wrap_content"--指定控件的高度 warp_content 包裹内容即可
android:text="这是一个按钮" --指定控件中显示的文字
/>
3)在MainActivity.java的onCreate方法中加载布局
调用setContentView()方法将布局id作为参数
setContentView(R.layout.布局文件名)
*R 是我们 本项目中的R ,Android SDK会为我们默认提供一个 Android.R
*不要用错
3.在清单文件 AndroidManifest.xml中进行注册
<activity android:name="com.zpark.activity.MainActivity" --指定给哪个Activity注册
android:label="Day2"> --指定应用名称
<intent-filter > --将该活动指定为应用的入口活动(主活动)
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
4.隐藏活动的标题栏
由于手机屏幕有限,所以我们一般会把标题栏隐藏。
在MainActivity的onCreate方法中添加:
//隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
*一定要在setContentView()方法之前调用,否则会报错
5.给按钮添加功能
1)在代码中获得按钮元素:
//获得按钮元素的对象
Button button = (Button)findViewById(R.id.button_1);
2)给按钮添加功能:
I 创建按钮单击监听器:
class MyListener implements OnClickListener{
@Override
public void onClick(View arg0) {
//当按钮点击时触发
Log.e("MyListener", "你点击了按钮!");
}
}
II注册按钮单击监听器:
button.setOnClickListener(监听器对象);
3)*使用匿名内部类给按钮添加功能
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
Log.e("MainActivity", "你又点击了按钮!");
}
});
6.销毁活动:
最简单的销毁活动方式是按下Back键
从代码中也可以进行活动的销毁
调用finish()
============================ ======================
2015.11.3 下午
=========================================================================
活动的跳转
一、使用Intent启动另一个活动
1.显式Intent
1)创建布局文件 next_layout.xml
2)创建NextActivity类
3)获取一个按钮对象
4)在按钮单击监听器中创建一个意图对象
//1.创建意图对象 意图对象运行时所需的容器 跳转到哪一个Activity
Intent intent = new Intent(MainActivity.this , NextActivity.class);
5)调用startActivity(intent)
调用startActivity()把意图对象作为参数传入进去。
*因为以这种方式创建Intent对象时,已经表明了将来要跳转到哪一个Activity,意图非常明确
所以我们把它称之为显式Activity。
2.隐式Intent
每个活动可以配置一个意图过滤器
在意图过滤器中可以配置 action 和 category 信息。
当一个意图的 action 信息和category信息都能够匹配时,才会响应该Activity
1)配置Activity的 intent-filter
<intent-filter>
<action android:name="com.zpark.activity.ACTION"></action>
<category android:name="com.zpark.activity.CATEGORY"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
2)在代码中创建Intent
Intent intent = new Intent("com.zpark.activity.ACTION");
intent.addCategory("com.zpark.activity.CATEGORY");
startActivity( intent );
使用隐式Intent也可以启动其他应用中的Activity
3)setData() 向Intent中添加一组数据
activity标签可以再指定一个data标签
更加精准地指定当前活动可以响应什么类型的数据
data标签可配:
android:scheme 用于指定数据的协议部分:例如:http
android:host 用于指定数据的主机名部分:例如: www.google.com
android:port 用于指定数据的端口部分: 例如::2013
android:mimeType 用于指定可以处理的数据类型,允许通过通配符的方式指定
练习:
给崔震投票功能
隐式Intent的更多用法
1.Intent.ACTION_CALL_BUTTON
查看通话记录
1)在main_layout.xml中添加一个按钮
2)在MainActivity中获得按钮对象并且给按钮注册监听器
3)在监听器中创建一个隐式意图:
Intent intent = new Intent(Intent.ACTION_CALL_BUTTON);
startActivity(intent);
2.Intent.ACTION_VIEW
播放视频功能
1)在main_layout.xml中添加一个按钮
2)在MainActivity中获得按钮对象并且给按钮注册监听器
3)在监听器中创建一个隐式意图:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("视频路径");
intent.setDataAndType(uri , "video/*");
startActivity( intent );
3.Intent.ACTION_CALL
拨打电话
1)在main_layout.xml中添加一个按钮
2)在MainActivity中获得按钮对象并且给按钮注册监听器
3)在监听器中创建一个隐式意图:
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:13911312104"));
startActivity( intent );
4.Intent.ACTION_SENDTO
发送一个短信
1)在main_layout.xml中添加一个按钮
2)在MainActivity中获得按钮对象并且给按钮注册监听器
3)在监听器中创建一个隐式意图:
Intent intent = new Intent(Intent.ACTION_SENDTO,Uri.parse("smsto:18091185673"));
intent.putExtra("sms_body", "[国家地震局]警告:2015年11月4日 在郑大软件学院 水环楼3层 318教室 可能会发生局部地震,地震等级 12.5级,为了防止您被震飞,请速来109教室避难!");
startActivity(intent);
Activity之间的值传递
1.使用Intent向下一个活动传值
Intent不光可以启动一个活动,还可以在活动启动时进行值传递。
1)在第一个活动中使用
Intent intent = new Intent();
intent.putExtra("key","value");
2)在另一个活动中使用
Intent intent = getIntent();
String value = intent.getString("key");
2.返回数据给上一个活动
点击Back键活动就返回了,这就意味着活动被销毁了,希望在活动被销毁前返回一个数据。
Activity 中提供了一个方法
startActivityForResult();
这个方法用于启动某个活动,参数为Intent
使用这个方法启动活动时,希望下一个活动会为我提供一个返回值。
setResult();--方法可以返回一组数据给上一个活动
返回时机,是在该活动销毁时
Activity提供了一个回调函数
onActivityResult()
当上一个活动使用setResult()方法返回时,会调用这个函数。
1)使用startActivityForResult(Intent intent , int requestCode)启动活动
**intent 是保存数据的意图对象
**requestCode 代表请求码,唯一即可
2)使用setReulst(int resultCode , Intent intent)将数据返回
**intent 是保存数据的意图对象
**resultCode 一般只用 RESULT_OK :代表成功
RESULT_CANCELED :代表失败
3)使用onActivityResult()接收上一个活动的返回值
4)当用户点击Back键时原来onClick方法中的setResult()就不会执行了
Activity 中提供了一个方法 onBackPressed()
当用户点击Back键时,该方法会执行。