Android事件处理:事件处理就是对组件设置相应的监听器,在main.xml文件中设置好组件后,在MainActivity.java文件中对组件设置监听器实现相应功能。
1、单击事件(OnClickLisenter)
代码(实现数字的计算功能):
<LinearLayout//总体的布局方式是线性垂直排列
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout//在总体布局下嵌套了一个线性水平排列的布局方式
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<EditText
android:id="@+id/edit1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text1"
/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/edit2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text2"
/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text7"
/>
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<RelativeLayout //在总体布局下设置了一个相对布局
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<Button
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text3"
/>
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/but1"//but2相对于but1在其右边
android:text="@string/text4"
/>
<Button
android:id="@+id/but3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/but2"
android:text="@string/text5"
/>
<Button
android:id="@+id/but4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/but3"
android:text="@string/text6"
/>
</RelativeLayout>
</LinearLayout>
MainActivity.java文件:
package com.example.myclick;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView showView = null;//显示结果
private TextView note = null;//两个输入框之间的符号
private EditText edit1 = null;//定义输入框组件1
private EditText edit2 = null;//定义输入框组件1
private Button butJia = null;//定义Button组件
private Button butJian = null;
private Button butCheng = null;
private Button butChu = null;
private double num1 = 0;
private double num2 = 0;
private TextView Error = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.showView = (TextView)super.findViewById(R.id.text);//通过id取得文本组件,这就是在写组件是要设置id的原因之一。
this.Error = (TextView)super.findViewById(R.id.text3);
this.edit1 = (EditText)super.findViewById(R.id.edit1);
this.edit2 = (EditText)super.findViewById(R.id.edit2);
this.butJia = (Button)super.findViewById(R.id.but1);
this.butJian = (Button)super.findViewById(R.id.but2);
this.butCheng = (Button)super.findViewById(R.id.but3);
this.butChu = (Button)super.findViewById(R.id.but4);
this.note = (TextView)super.findViewById(R.id.text2);
this.butJia.setOnClickListener(new JiaListener());//设置单击事件监听器
this.butJian.setOnClickListener(new JianListener());
this.butCheng.setOnClickListener(new ChengListener());
this.butChu.setOnClickListener(new ChuListener());
this.edit1.setOnClickListener(new removeEdit1());
this.edit2.setOnClickListener(new removeEdit2());
}
private class removeEdit1 implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.edit1.setText("");//当点击输入框里的文字时,文字会清空。
}
}
private class removeEdit2 implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.edit2.setText("");
}
}
private class JiaListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.num1 = Double.valueOf(MainActivity.this.edit1.getText().toString());
MainActivity.this.num2 = Double.valueOf(MainActivity.this.edit2.getText().toString());
MainActivity.this.note.setText(" + ");
MainActivity.this.showView.setText(" = " + String.valueOf(num1 + num2));
}
}
private class JianListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.num1 = Double.valueOf(MainActivity.this.edit1.getText().toString());
MainActivity.this.num2 = Double.valueOf(MainActivity.this.edit2.getText().toString());
MainActivity.this.note.setText(" - ");
MainActivity.this.showView.setText(" = " + String.valueOf(num1 - num2));
}
}
private class ChengListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.num1 = Double.valueOf(MainActivity.this.edit1.getText().toString());
MainActivity.this.num2 = Double.valueOf(MainActivity.this.edit2.getText().toString());
MainActivity.this.note.setText(" * ");
MainActivity.this.showView.setText(" = " + String.valueOf(num1 * num2));
}
}
private class ChuListener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.num1 = Double.valueOf(MainActivity.this.edit1.getText().toString());
MainActivity.this.num2 = Double.valueOf(MainActivity.this.edit2.getText().toString());
MainActivity.this.note.setText(" / ");
MainActivity.this.showView.setText(" = " + String.valueOf(num1 / num2));
}
}
}
注:当你单击一个组件而你又想程序作出反应这就是设置单击事件监听器主要作用。
2、单选钮(OnCheckedChangeListener)
代码:(当点击一个单选钮时程序做出反应)
<LinearLayout//设置布局方式为线性垂直排列
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="45px"
android:text="@string/text3"
/>
<RadioGroup //设置单选钮组件
android:id="@+id/superCar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<RadioButton //设置单选钮
android:id="@+id/RB1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text1"
/>
<RadioButton
android:id="@+id/RB2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text2"
/>
</RadioGroup>
</LinearLayout>
MainActivity.java文件内容。
package com.example.radiolistenerdemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View.OnClickListener;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text = null;//定义文本组件
private RadioGroup car = null;//定义一个盛装单选钮组件的容器
private RadioButton lam = null;//定义单选钮组件
private RadioButton Fer = null;//定义单选钮组件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.text = (TextView)super.findViewById(R.id.show);//通过id找到文本组件。
this.car = (RadioGroup)super.findViewById(R.id.superCar);//通过id找到盛装单选钮组件的容器。
this.lam = (RadioButton)super.findViewById(R.id.RB1);//通过id找到单选钮组件。
this.Fer = (RadioButton)super.findViewById(R.id.RB2);
this.car.setOnCheckedChangeListener(new OnCheckChangeListener());//给盛装单选钮组件的容器设置监听器。
}
private class OnCheckChangeListener implements android.widget.RadioGroup.OnCheckedChangeListener {
String s = null;
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
if (MainActivity.this.lam.getId() == checkedId) {//如果lam所表示的单选钮被选中。
s = MainActivity.this.lam.getText().toString();
MainActivity.this.text.setText("您选择的车 :" + s);//设置显示的文字。
} else if (MainActivity.this.Fer.getId() == checkedId) {//如果Fer所表示的单选钮被选中。
s = MainActivity.this.Fer.getText().toString();
MainActivity.this.text.setText("您选择的车 :" + s);//设置显示的文字。
}
}
}
}
3、下拉列表框(OnItemSelectedListener)
代码:(在下拉列表框中选择待选项程序会做出反应)
main.xml文件内容。
<LinearLayout//设置布局为线性垂直排列
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView//设置文本组件
android:id="@+id/showText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="45px"
android:textColor="#2828FF"
android:text="@string/hello_world" />
<Spinner //设置下拉列表框组件
android:id="@+id/car"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:prompt="@string/hello_world"
android:entries="@array/car_labes"//car_labes是数组名存储在values下的自定义的xml文件中,entries的作用就是把xml文件中的内容加载出来。
/>
</LinearLayout>
car.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="car_labes">//定义一个string类型的数组
<item>柯塞尼格</item>
<item>法拉利</item>
<item>保时捷</item>
<item>兰博基尼</item>
</string-array>
</resources>
MainActivity.java文件的内容。
package com.example.spinnerlistenerproject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView show = null;//定义文本组件
private Spinner superCar = null;//定义下拉列表组件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.show = (TextView)super.findViewById(R.id.showText);//通过id取得文本组件。
this.superCar = (Spinner)super.findViewById(R.id.car);//通过id取得下拉列表组件。
this.superCar.setOnItemSelectedListener(new OnItemSelectedListener());//为下拉列表框设置监听器
}
private class OnItemSelectedListener implements android.widget.AdapterView.OnItemSelectedListener{
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) { //表示选项改变时触发
// TODO Auto-generated method stub
String s = parent.getItemAtPosition(position).toString();
MainActivity.this.show.setText("你喜欢的跑车是 : " + s);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
//表示没有选项时触发,现在不需要
}
}
}
4、监听日期与时间的改变(OnTimeChangedListener,OnDateChangedListener)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/showText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<DatePicker//定义一个日期选择组件
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TimePicker //定义一个时间选择组件
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
MainActivity.java文件内容。
package com.example.timeanddatelistener;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
public class MainActivity extends Activity {
private EditText edit = null;//定义文本编辑框组件。
private DatePicker date = null;//定义日期选择器组件。
private TimePicker time = null;//定义时间选择器组件。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.edit = (EditText)super.findViewById(R.id.showText);
this.date = (DatePicker)super.findViewById(R.id.date);
this.time = (TimePicker)super.findViewById(R.id.time);
this.time.setOnTimeChangedListener(new onTimeChangedListener());//设置时间改变监听器。
this.time.setIs24HourView(true);//设置时间显示为24小时制。
this.date.init(this.date.getYear(), this.date.getMonth(), this.date.getDayOfMonth(),
new onDateChangedListenerImpl());
this.setDate();
}
private class onTimeChangedListener implements OnTimeChangedListener {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
MainActivity.this.setDate();
}
}
private class onDateChangedListenerImpl implements OnDateChangedListener {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
MainActivity.this.setDate();
}
}
public void setDate() {
this.edit.setText(this.date.getYear()+ "-" + (this.date.getMonth()+1) + "-"
+ this.date.getDayOfMonth() + "--"+ this.time.getCurrentHour() + " : " + this.time.getCurrentMinute());
}
}
5、焦点事件(OnFocusChangeListener)
代码:(焦点事件一般跟文本编辑框一起出现)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/edit1"//定义两个文本编辑框
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/txt1" />
<EditText
android:id="@+id/edit2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView //用于显示提示信息
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
MainActivity.java文件内容
package com.example.focuslistener;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText edit = null;//定义文本编辑框
private TextView text = null;定义文本组件
private EditText edit1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.edit = (EditText)super.findViewById(R.id.edit1);//通过id找到文本编辑框。
this.text = (TextView)super.findViewById(R.id.text);
this.edit1 = (EditText)super.findViewById(R.id.edit2);
this.edit.setOnFocusChangeListener(new OnFocusChangeListenerImpl());//给文本编辑框设置焦点改变监听器。
this.edit.setOnClickListener(new OnClickListenerImpl());//给文本编辑框设置单击事件监听器。
this.edit1.setOnFocusChangeListener(new OnFocusChangeListenerImpl1());
}
private class OnFocusChangeListenerImpl1 implements OnFocusChangeListener {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
MainActivity.this.text.setText("编辑框2得到焦点");
}
}
}
private class OnFocusChangeListenerImpl implements OnFocusChangeListener {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
MainActivity.this.text.setText("编辑框1得到焦点");
}
}
}
private class OnClickListenerImpl implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.edit.setText("");
}
}
}
6、
长按事件(OnLongClickListener)一般点击超过两秒才算长按事件。
代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/txt1" />
<ImageView
android:id="@+id/photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/sun"
/>
</LinearLayout>
MainActivity.java文件内容package com.example.longclicklistener;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.ImageView;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView text = null;//定义文本组件
private ImageView img = null;//定义图片组件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.text = (TextView)super.findViewById(R.id.txt);
this.img = (ImageView)super.findViewById(R.id.photo);
this.img.setOnLongClickListener(new OnLongClickListenerImpl());//给图片组件设置长按监听器。
}
private class OnLongClickListenerImpl implements OnLongClickListener {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
try {
MainActivity.this.clearWallpaper();//首先清楚已有桌面壁纸
MainActivity.this.setWallpaper(MainActivity.this.img.getResources().
openRawResource(R.drawable.sun));
MainActivity.this.text.setText("壁纸已被更改");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
}