6.1. Android事件处理原理
了解事件处理的作用。
了解常用的事件及相关处理接口
基本上每个组件都会存在相应的事件处理操作,但不管有多少个组件,其基本的操作流程都是一样的。
如果要进行事件处理,则必须有一个事件源。如按按钮、修改选项等,每一次的动作基本上都会有所监听,
而当用户执行了这些操作之后就自动的产生了一个事件源。
一旦有了事件之后肯定要使用某些方法进行事件的处理,事件以及事件处理方法的划分。
每一个事件处理的接口都需要一个特定的方法进行事件的绑定操作,这些事件处理接口的子类对象需
要通过以上方法绑定组件之上,以后如果出现了相关的事件处理操作之后才会执行。
6.2. OnClickListener (单击事件)
在手机使用的过程中,经常要使用按钮触发一些基本的操作,这个时候就可以通过单击事件完成,单击事件使用
View.OnClickListener(OnClickListene是View的内部接口)接口进行事件的处理,此接口定义如下:
public static interface View.OnClickListener{
public void onClick(View v);
}
用户可以使用View.OnClickListener接口进行单击处理类的编写。
里面的OnClick()方法表示的是单击组件之后执行的方法体,而传入的是一个操作此方法的组件的对象,因为所有
的组件都是View的子类。
本程序是肯定要Activity的支持
6.2.1 范例1:显示输入的内容:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ClickActivity" >
<EditText
android:id="@+id/myEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/myButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="显示输入信息" />
<TextView
android:id="@+id/myText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="输入的信息是:" />
</LinearLayout>
package com.makyan.demo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class ClickActivity extends Activity {
private EditText et = null;
private Button bt = null;
private TextView tv = null;
static String info = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_click);
et = (EditText) super.findViewById(R.id.myEdit);
bt = (Button) super.findViewById(R.id.myButton);
tv = (TextView) super.findViewById(R.id.myText);
bt.setOnClickListener(new OnClickListener() { //设置事件
public void onClick(View v) {
info = et.getText().toString(); //获取输入内容
System.out.println("sssss:"+info);
tv.setText("您输入的信息是:" + info); //更新输入内容
}
});
}
}
6.2.2 范例2:四则运算:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ClickActivity" >
<LinearLayout
android:id="@+id/linear1"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/operationEdt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入数字..." />
<EditText
android:id="@+id/operationEdt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入数字..." />
<TextView
android:id="@+id/operationText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="=" />
<TextView
android:id="@+id/resultText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="计算结果" />
</LinearLayout>
<LinearLayout
android:id="@+id/linear2"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/addButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+" />
<Button
android:id="@+id/subButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-" />
<Button
android:id="@+id/mulButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*" />
<Button
android:id="@+id/divButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="÷" />
</LinearLayout>
</LinearLayout>
——————————————————————————————————————————————
package com.makyan.demo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class OperationClickActivity extends Activity {
private EditText edt1 = null;
private EditText edt2 = null;
private Button addButton = null; //加
private Button subButton = null; //减
private Button mulButton = null; //乘
private Button divButton = null; //除
private TextView showText = null; //计算结果
int num1;
int num2;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_operation_click);
edt1 = (EditText) super.findViewById(R.id.operationEdt1);
edt2 = (EditText) super.findViewById(R.id.operationEdt2);
addButton = (Button) super.findViewById(R.id.addButton);
subButton = (Button) super.findViewById(R.id.subButton);
mulButton = (Button) super.findViewById(R.id.mulButton);
divButton = (Button) super.findViewById(R.id.divButton);
showText = (TextView) super.findViewById(R.id.resultText);
addButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
num1 = Integer.parseInt(edt1.getText().toString());
num2 = Integer.parseInt(edt2.getText().toString());
showText.setText(String.valueOf(num1 + num2));
}
});
subButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
num1 = Integer.parseInt(edt1.getText().toString());
num2 = Integer.parseInt(edt2.getText().toString());
showText.setText(String.valueOf(num1 - num2));
}
});
mulButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
num1 = Integer.parseInt(edt1.getText().toString());
num2 = Integer.parseInt(edt2.getText().toString());
showText.setText(String.valueOf(num1 * num2));
}
});
divButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
num1 = Integer.parseInt(edt1.getText().toString());
num2 = Integer.parseInt(edt2.getText().toString());
showText.setText(String.valueOf(num1 /num2));
}
});
edt1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
edt1.setText("");
}
});
edt2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
edt2.setText("");
}
});
}
}
6.2.3 范例3:屏幕方向改变
很多时候游戏的开发需要手机采用横屏的方式显示,所以在Android中也可以进行屏幕切换的操作。
需Activity类的支持,Activity提供的方法:
如果手机的屏幕发生改变,肯定属于系统的设置发生了改变,所以一旦发生了系统的设置改变,会自动的执行
onConfigurationChanged()方法。
而对于所有手机的屏幕的方向如果要设置肯定需要一个int型的数据。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/change"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="改变屏幕方向为横屏显示(当前为竖屏显示)" />
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/mldn_portrait"/>
</LinearLayout>
牵涉到系统改变的,都需要给配置修改系统响应的权限
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.makyan.demo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.makyan.demo.OratationClickActivity"
android:label="@string/app_name"
<!-- 默认屏幕显示方向为竖屏 -- >
android:screenOrientation="portrait"
<!-- 配置configchanges事件 -- >
android:configChanges="orientation|keyboard">
<intent-filter>
<action android:name