事件监听篇---第二篇
下面是各种常用控件的事件监听的使用
①EditText(编辑框)的事件监听---OnKeyListener
②RadioGroup、RadioButton(单选按钮)的事件监听---OnCheckedChangeListener
③CheckBox(多选按钮)的事件监听---OnCheckedChangeListener
④Spinner(下拉列表)的事件监听---OnItemSelectedListener
⑤Menu(菜单)的事件处理---onMenuItemSelected
⑥Dialog(对话框)的事件监听---DialogInterface.OnClickListener()
第一个例子:EditText的事件监听
1 package org.hualang.eventtest2;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.KeyEvent;
6 import android.view.View;
7 import android.widget.EditText;
8 import android.widget.TextView;
9
10 public class EventTest2 extends Activity {
11 /** Called when the activity is first created. */
12 private TextView mytext;
13 private EditText edittext;
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18 mytext = (TextView)findViewById(R.id.mytext);
19 edittext = (EditText)findViewById(R.id.edittext);
20 /**
21 * 设置当EditText为空,则提示“请输入账号”
22 * 在配置文件main.xml中可以用android:hint="请输入账号"来实现
23 */
24 edittext.setHint("请输入账号");
25 //下面为EditText事件监听
26 edittext.setOnKeyListener(new EditText.OnKeyListener()
27 {
28
29 @Override
30 public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
31 //得到文字,显示在TextView中
32 mytext.setText("内容:"+edittext.getText().toString());
33 return false;
34 }
35
36 });
37 }
38 }
main.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:id="@+id/mytext"
11 />
12 <EditText
13 android:id="@+id/edittext"
14 android:layout_width="fill_parent"
15 android:layout_height="wrap_content"
16 android:textSize="10pt"
17 />
18 </LinearLayout>
运行结果如下:
第二个例子:单选按钮的事件监听处理
1 package org.hualang.eventtest;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Gravity;
6 import android.widget.RadioButton;
7 import android.widget.RadioGroup;
8 import android.widget.Toast;
9
10 public class EventTest3 extends Activity {
11 /** Called when the activity is first created. */
12 private RadioGroup group;
13 private RadioButton radio1,radio2,radio3,radio4;
14 @Override
15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState);
17 setContentView(R.layout.main);
18
19 group = (RadioGroup)findViewById(R.id.radiogroup1);
20 radio1 = (RadioButton)findViewById(R.id.button1);
21 radio2 = (RadioButton)findViewById(R.id.button2);
22 radio3 = (RadioButton)findViewById(R.id.button3);
23 radio4 = (RadioButton)findViewById(R.id.button4);
24
25 group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
26
27 @Override
28 public void onCheckedChanged(RadioGroup group, int checkedId) {
29 // TODO Auto-generated method stub
30 if (checkedId == radio2.getId())
31 {
32 showMessage("正确答案:" + radio2.getText()+",恭喜你,答对了");
33 }
34 else
35 {
36 showMessage("对不起,虽然很多,但不是公认的最多");
37 }
38 }
39 });
40 }
41 public void showMessage(String str)
42 {
43 Toast toast = Toast.makeText(this, str, Toast.LENGTH_SHORT);
44 toast.setGravity(Gravity.TOP, 0, 220);
45 toast.show();
46 }
47 }
main.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:id="@+id/mytextview"
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content"
11 android:text="哪个城市的美女最多?"
12 />
13 <RadioGroup
14 android:id="@+id/radiogroup1"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:orientation="vertical"
18 >
19 <RadioButton
20 android:id="@+id/button1"
21 android:layout_width="wrap_content"
22 android:layout_height="wrap_content"
23 android:text="杭州"
24 />
25 <RadioButton
26 android:id="@+id/button2"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:text="重庆"
30 />
31 <RadioButton
32 android:id="@+id/button3"
33 android:layout_width="wrap_content"
34 android:layout_height="wrap_content"
35 android:text="成都"
36 />
37 <RadioButton
38 android:id="@+id/button4"
39 android:layout_width="wrap_content"
40 android:layout_height="wrap_content"
41 android:text="香港"
42 />
43 </RadioGroup>
44 </LinearLayout>
运行结果如下:
第三个例子:复选框的事件处理
1 package org.hualang.eventtest4;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Gravity;
6 import android.view.View;
7 import android.widget.Button;
8 import android.widget.CheckBox;
9 import android.widget.CompoundButton;
10 import android.widget.CompoundButton.OnCheckedChangeListener;
11 import android.widget.Toast;
12
13 public class EventTest4 extends Activity {
14 /** Called when the activity is first created. */
15 private CheckBox ch1,ch2,ch3,ch4,ch5;
16 private Button mybutton;
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.main);
21
22 mybutton = (Button)findViewById(R.id.mybutton);
23 ch1 = (CheckBox)findViewById(R.id.check1);
24 ch2 = (CheckBox)findViewById(R.id.check2);
25 ch3 = (CheckBox)findViewById(R.id.check3);
26 ch4 = (CheckBox)findViewById(R.id.check4);
27 ch5 = (CheckBox)findViewById(R.id.check5);
28
29 ch1.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()
30 {
31
32 @Override
33 public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
34 // TODO Auto-generated method stub
35 if(ch1.isChecked())
36 {
37 showMessage("你选择了"+ch1.getText());
38 }
39 }
40
41 });
42 ch2.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()
43 {
44
45 @Override
46 public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
47 // TODO Auto-generated method stub
48 if(ch3.isChecked())
49 {
50 showMessage("你选择了"+ch2.getText());
51 }
52 }
53
54 });
55 ch3.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()
56 {
57
58 @Override
59 public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
60 // TODO Auto-generated method stub
61 if(ch3.isChecked())
62 {
63 showMessage("你选择了"+ch3.getText());
64 }
65 }
66
67 });
68 ch4.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()
69 {
70
71 @Override
72 public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
73 // TODO Auto-generated method stub
74 if(ch4.isChecked())
75 {
76 showMessage("你选择了"+ch4.getText());
77 }
78 }
79
80 });
81 ch5.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()
82 {
83
84 @Override
85 public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
86 // TODO Auto-generated method stub
87 if(ch5.isChecked())
88 {
89 showMessage("你选择了"+ch5.getText());
90 }
91 }
92
93 });
94
95 mybutton.setOnClickListener(new Button.OnClickListener()
96 {
97
98 @Override
99 public void onClick(View arg0) {
100 // TODO Auto-generated method stub
101 int num = 0;
102 if(ch1.isChecked())
103 {
104 num++;
105 }
106 if(ch2.isChecked())
107 {
108 num++;
109 }
110 if(ch3.isChecked())
111 {
112 num++;
113 }
114 if(ch4.isChecked())
115 {
116 num++;
117 }
118 if(ch5.isChecked())
119 {
120 num++;
121 }
122
123 showMessage("谢谢参与,您一共选择了"+num+"项");
124
125 }
126
127 });
128 }
129
130
131
132 public void showMessage(String str)
133 {
134 Toast toast = Toast.makeText(this, str, Toast.LENGTH_SHORT);
135 toast.setGravity(Gravity.TOP, 0, 220);
136 toast.show();
137 }
138 }
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="你喜欢哪些智能手机系统"
11 />
12 <CheckBox
13 android:id="@+id/check1"
14 android:layout_width="fill_parent"
15 android:layout_height="wrap_content"
16 android:text="苹果 ios"
17 />
18 <CheckBox
19 android:id="@+id/check2"
20 android:layout_width="fill_parent"
21 android:layout_height="wrap_content"
22 android:text="谷歌 Android"
23 />
24 <CheckBox
25 android:id="@+id/check3"
26 android:layout_width="fill_parent"
27 android:layout_height="wrap_content"
28 android:text="RIM BlackBerry"
29 />
30 <CheckBox
31 android:id="@+id/check4"
32 android:layout_width="fill_parent"
33 android:layout_height="wrap_content"
34 android:text="微软 Windows phone 7"
35 />
36 <CheckBox
37 android:id="@+id/check5"
38 android:layout_width="fill_parent"
39 android:layout_height="wrap_content"
40 android:text="诺基亚 symbian"
41 />
42 <Button
43 android:id="@+id/mybutton"
44 android:layout_width="fill_parent"
45 android:layout_height="wrap_content"
46 android:text="确定"
47 />
48
49 </LinearLayout>
运行结果:
第四个例子:Spinner下拉菜单的事件处理
1 package org.hualang.eventtest5;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.widget.AdapterView;
7 import android.widget.ArrayAdapter;
8 import android.widget.Spinner;
9 import android.widget.TextView;
10
11 public class EventTest5 extends Activity {
12 /** Called when the activity is first created. */
13 private static final String[] citys={"杭州","北京","成都","大连","深圳","南京"};
14 private TextView text;
15 private Spinner spinner;
16 private ArrayAdapter<String> adapter;
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20 setContentView(R.layout.main);
21 text=(TextView)findViewById(R.id.text);
22 spinner=(Spinner)findViewById(R.id.spinner);
23
24 //将可选内容与ArrayAdapter连接
25 adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,citys);
26 //设置下拉列表风格
27 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
28 //将adapter添加到spinner中
29 spinner.setAdapter(adapter);
30 //添加Spinner事件监听
31 spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener()
32 {
33
34 @Override
35 public void onItemSelected(AdapterView<?> arg0, View arg1,
36 int arg2, long arg3) {
37 // TODO Auto-generated method stub
38 text.setText("你所在的城市是:"+citys[arg2]);
39 //设置显示当前选择的项
40 arg0.setVisibility(View.VISIBLE);
41 }
42
43 @Override
44 public void onNothingSelected(AdapterView<?> arg0) {
45 // TODO Auto-generated method stub
46
47 }
48
49 });
50 }
51 }
main.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:id="@+id/text"
9 android:layout_width="fill_parent"
10 android:layout_height="wrap_content"
11 android:text="您所在的城市"
12 />
13 <Spinner
14 android:id="@+id/spinner"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:layout_centerHorizontal="true"
18 />
19 </LinearLayout>
运行结果如下:
第五个例子:Menu(菜单)的事件处理
1 package org.hualang.eventtest6;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.Menu;
6 import android.view.MenuInflater;
7 import android.view.MenuItem;
8 import android.widget.Toast;
9
10 public class EventTest6 extends Activity {
11 /** Called when the activity is first created. */
12 @Override
13 public void onCreate(Bundle savedInstanceState) {
14 super.onCreate(savedInstanceState);
15 setContentView(R.layout.main);
16 }
17
18 @Override
19 public boolean onCreateOptionsMenu(Menu menu) {
20 // TODO Auto-generated method stub
21 MenuInflater inflater = getMenuInflater();
22 //设置menu界面为res/menu/menu.xml
23 inflater.inflate(R.menu.menu, menu);
24 return true;
25 }
26
27 @Override
28 public boolean onMenuItemSelected(int featureId, MenuItem item) {
29 //得到当前选中的MenuItem的ID
30 int itemId = item.getItemId();
31 switch(itemId)
32 {
33 case R.id.apple:
34 Toast toast = Toast.makeText(this, "这是苹果", Toast.LENGTH_SHORT);
35 toast.show();
36 break;
37 case R.id.banana:
38 Toast toast2 = Toast.makeText(this, "这是香蕉", Toast.LENGTH_SHORT);
39 toast2.show();
40 break;
41 case R.id.exit:
42 EventTest6.this.finish();
43 break;
44 }
45 return true;
46 }
47
48
49 }
res/menu/menu.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
3 <item android:id="@+id/apple"
4 android:title="苹果"
5 />
6 <item android:id="@+id/banana"
7 android:title="香蕉"
8 />
9 <item android:id="@+id/exit"
10 android:title="退出"
11 />
12 </menu>
运行结果如下:
第六个例子:对话框的事件处理
1 package org.hualang.dialog;
2
3 import android.app.Activity;
4 import android.app.AlertDialog;
5 import android.app.Dialog;
6 import android.app.ProgressDialog;
7 import android.content.DialogInterface;
8 import android.content.DialogInterface.OnClickListener;
9 import android.os.Bundle;
10 import android.view.LayoutInflater;
11 import android.view.View;
12
13 public class MainActivity extends Activity {
14 /** Called when the activity is first created. */
15 ProgressDialog myDialog;
16 @Override
17 public void onCreate(Bundle savedInstanceState) {
18 super.onCreate(savedInstanceState);
19 setContentView(R.layout.main);
20
21 Dialog dialog = new AlertDialog.Builder(MainActivity.this)
22 .setTitle("登录提示")
23 .setMessage("这里需要登录")
24 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
25
26 @Override
27 public void onClick(DialogInterface dialog, int which) {
28 // TODO Auto-generated method stub
29 LayoutInflater factory = LayoutInflater.from(MainActivity.this);
30 final View DialogView = factory.inflate(R.layout.dialog, null);
31 AlertDialog dlg = new AlertDialog.Builder(MainActivity.this)
32 .setTitle("登录框")
33 .setView(DialogView)
34 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
35
36 @Override
37 public void onClick(DialogInterface dialog, int whichButton) {
38 // TODO Auto-generated method stub
39 myDialog = ProgressDialog.show(MainActivity.this, "请等待...", "正在为你登录", true);
40 new Thread()
41 {
42 public void run()
43 {
44 try
45 {
46 sleep(3000);
47 }catch(Exception e)
48 {
49 e.printStackTrace();
50 }finally
51 {
52 myDialog.dismiss();
53 }
54 }
55 }.start();
56 }
57 }).setNegativeButton("取消",
58 new DialogInterface.OnClickListener() {
59
60 @Override
61 public void onClick(DialogInterface dialog, int which) {
62 // TODO Auto-generated method stub
63 MainActivity.this.finish();
64 }
65 }).create();
66 dlg.show();
67 }
68 }).setNeutralButton("退出", new DialogInterface.OnClickListener() {
69
70 @Override
71 public void onClick(DialogInterface dialog, int which) {
72 // TODO Auto-generated method stub
73 MainActivity.this.finish();
74 }
75 }).create();
76 dialog.show();
77
78 }
79 }
res/layout/dialog.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <TextView
8 android:id="@+id/username"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:layout_marginLeft="20dip"
12 android:layout_marginRight="20dip"
13 android:text="账号"
14 android:gravity="left"
15 android:textAppearance="?android:attr/textAppearanceMedium"
16 />
17 <EditText
18 android:id="@+id/myusername"
19 android:layout_height="wrap_content"
20 android:layout_width="fill_parent"
21 android:layout_marginLeft="20dip"
22 android:layout_marginRight="20dip"
23 android:scrollHorizontally="true"
24 android:autoText="false"
25 android:capitalize="none"
26 android:gravity="fill_horizontal"
27 android:textAppearance="?android:attr/textAppearanceMedium"
28 />
29 <TextView
30 android:id="@+id/password"
31 android:layout_width="fill_parent"
32 android:layout_height="wrap_content"
33 android:layout_marginLeft="20dip"
34 android:layout_marginRight="20dip"
35 android:text="密码"
36 android:gravity="left"
37 android:textAppearance="?android:attr/textAppearanceMedium"
38 />
39 <EditText
40 android:id="@+id/mypassword"
41 android:layout_width="fill_parent"
42 android:layout_height="wrap_content"
43 android:layout_marginLeft="20dip"
44 android:layout_marginRight="20dip"
45 android:scrollHorizontally="true"
46 android:autoText="false"
47 android:capitalize="none"
48 android:gravity="fill_horizontal"
49 android:password="true"
50 />
51 </LinearLayout>
运行结果:
转自:http://www.iteye.com/topic/1060815