Android中的 事件流----浅析安卓中的动与静(二) 系统事件流

任何程序都是静态代码,我们把这些静态代码打包好,然后放到运行环境当中,通过事件流的驱动使这些代码运行起来。Android的环境也不例外。
 
静态的代码,在动态事件的驱动下,才会有效的运转起来。
 
驱动Android程序运行起来的事件大致可以分为以下几种:
 
用户事件
:如点击屏幕,滑动等各种手势;
 
系统事件:如屏幕方向的转变;
 
线程通讯事件:线程之间互发消息,程序根据消息内容进行相应的响应;
 
进程通讯事件:这里的进程包括本程序开启的进程,也包括其他应用程序的进程。

 

下面来介绍动态事件驱动的第二种:系统事件

系统事件流

有时候,我们可能需要让应用程序监听系统设置的更改,对系统设置的更改做出响应。

这个时候就不得不提Configuration类了,它是专门用于手机设备上配置信息的类。

程序可以通过调用Ativity的如下方法获取系统的Configuration对象:

Configuration cfg = getResources().getConfiguration();
Configuration类的对象可以查看很多关于手机配置的信息,这里不是我们讨论的重点。我们主要关注的是手机配置的信息变化之后,如何通过代码来进行响应。

这时候就不得不提一个回调方法onConfigurationChanged方法(关于回调和监听的区别,我在上篇文章中有所介绍,这里不在赘述),重写Activity的onConfigurationChanged方法响应系统设置的更改。

我们以屏幕方向转变为例,来介绍如何如何通过代码来进行响应。

具体可以参考以下代码:

mport android.app.Activity;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button) findViewById(R.id.bn);
		// 为按钮绑定事件监听器
		bn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View source) {
				Configuration config = getResources().getConfiguration();
				// 如果当前是横屏
				if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
					// 设为竖屏
					<strong>MainActivity.this.setRequestedOrientation(
						ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);</strong>
				}
				// 如果当前是竖屏
				if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {
					// 设为横屏
					MainActivity.this.setRequestedOrientation(
						ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
				}
			}
		});
	}
	// 重写该方法,用于监听系统设置的更改,主要是监控屏幕方向的更改
	@Override
	public void onConfigurationChanged(Configuration newConfig)
	{
		<strong>super.onConfigurationChanged(newConfig);
		String screen = newConfig.orientation ==
			Configuration.ORIENTATION_LANDSCAPE ? "横向屏幕" : "竖向屏幕";
		Toast.makeText(this, "系统的屏幕方向发生改变" + "\n修改后的屏幕方向为:"
				+ screen, Toast.LENGTH_LONG).show();</strong>
	}
}

当然要在AndroidManifest.xml中设置MainActivity监听屏幕方向改变的事件:


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	package="org.crazyit.event" >
	<application
		android:allowBackup="true"
		android:icon="@drawable/ic_launcher"
		android:label="@string/app_name"
		android:theme="@style/AppTheme" >
		<!-- 设置Activity可以监听屏幕方向改变的事件 -->
		<activity
			<strong>android:configChanges="orientation|screenSize"</strong>
			android:name=".MainActivity"
			android:label="@string/app_name" >
			<intent-filter>
				<action android:name="android.intent.action.MAIN" />
				<category android:name="android.intent.category.LAUNCHER" />
			</intent-filter>
		</activity>
	</application>
</manifest>

具体界面部分的代码不再详述,效果就是屏幕方向改变后,会弹出提示信息。

下篇将介绍动态事件驱动的第三种:线程通讯事件
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一步一台阶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值