1、实验任务:
利用事件处理的三种方式实现“打招呼”
2、运行效果图:
3、任务分析:
事件处理的三个要点:
a、搞清事件源:谁触发了事件的发生,此时,事件源是按钮Button
b、事件:发生了什么,此时,事件是点击事件
c、事件处理类:谁处理该事件
内部类
匿名内部类
在布局文件中设置与事件相关的属性
4、实现过程:
布局文件activity_main.xml:
<span style="font-size:18px;"><RelativeLayout 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:background="@drawable/bg"
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=".MainActivity" >
<TextView
android:id="@+id/tvNamePrompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="128dp"
android:text="@string/tv_namePrompt" />
<EditText
android:id="@+id/etName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tvNamePrompt"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:background="#ffffff"
android:drawableLeft="@drawable/name"
android:ems="8" />
<Button
android:id="@+id/btnClick"
android:background="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/etName"
android:layout_centerHorizontal="true"
android:layout_marginTop="21dp"
android:text="@string/btn_click" />
</RelativeLayout></span>
第一种按钮点击事件的处理方式(内部类):
<span style="font-size:18px;">package cn.edu.bztc.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG="MainActivity";
private Button btnClick;
private EditText etName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1、获取事件源
btnClick = (Button) findViewById(R.id.btnClick);
//根据id找到组件,并赋值
//由于Button是View的子类,必须强制类型转换(Ctrl+1)
btnClick.setOnClickListener(new ClickHandler());
//3、绑定事件源和事件处理类
etName = (EditText) findViewById(R.id.etName);
}
//2、创建事件处理类
class ClickHandler implements OnClickListener{
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String name = etName.getText().toString();
//获取文本框中输入的内容
Log.d(TAG,"name="+name);
Toast.makeText(MainActivity.this, "hello"+name, Toast.LENGTH_LONG).
show();
}
}
}</span>
第二种按钮点击事件的处理方式(匿名内部类):
<span style="font-size:18px;">package cn.edu.bztc.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG="MainActivity";
private Button btnClick;
private EditText etName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1、获取事件源
btnClick = (Button) findViewById(R.id.btnClick);
//根据id找到组件,并赋值
//由于Button是View的子类,必须强制类型转换(Ctrl+1)
etName = (EditText) findViewById(R.id.etName);
//2、创建事件处理类同时进行与事件源的绑定
btnClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String name = etName.getText().toString();
//获取文本框中输入的内容
Log.d(TAG,"name="+name);
Toast.makeText(MainActivity.this, "hello"+name, Toast.LENGTH_LONG).show();
}
});
}
}</span>
第三种按钮点击事件的处理方式(在布局文件中设置与事件相关的属性):
此时的布局文件activity_main.xml有所不同:
<span style="font-size:18px;"><RelativeLayout 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:background="@drawable/bg"
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=".MainActivity" >
<TextView
android:id="@+id/tvNamePrompt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="128dp"
android:text="@string/tv_namePrompt" />
<EditText
android:id="@+id/etName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tvNamePrompt"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:background="#ffffff"
android:drawableLeft="@drawable/name"
android:ems="8" />
<Button
android:id="@+id/btnClick"
android:background="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/etName"
android:layout_centerHorizontal="true"
android:layout_marginTop="21dp"
android:onClick="clickme"
android:text="@string/btn_click" />
</RelativeLayout></span>
MainActivity.java:
<span style="font-size:18px;">package cn.edu.bztc.helloworld;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
private static final String TAG="MainActivity";
private EditText etName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etName = (EditText) findViewById(R.id.etName);
}
public void clickme(View view){
String name = etName.getText().toString();
//获取文本框中输入的内容
Log.d(TAG,"name="+name);
Toast.makeText(MainActivity.this, "hello"+name, Toast.LENGTH_LONG).
show();
}
}
</span>
附:还有外部类,在这里先不做说明,这里所说的第三种方式有局限性,所以有时不提倡用!