单击事件
在手机使用的过程之中,经常要使用按钮触发一些基本的操作,这个时候就可以通过单击事件完成,单击事件使用View.OnClickListener接口进行事件的处理,此接口定义如下。
public static interface View.OnClickListener{
public void onClick(View v) ;
}
范例一:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/myed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入您的姓名"
/>
<Button
android:id="@+id/mybut"
android:layout_width="wrap_content"
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.richard.clicklistener;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
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 EditText edit = null;
private Button but = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.but = (Button) super.findViewById(R.id.mybut);
this.showView = (TextView) super.findViewById(R.id.mytext);
this.edit = (EditText) super.findViewById(R.id.myed);
but.setOnClickListener(new ShowListener()); //定义监听
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class ShowListener implements OnClickListener {
public void onClick(View v){
String info = edit.getText().toString(); //取得文本框输入内容
showView.setText("输入的内容是:" + info);
}
}
}
范例二:
简单的四则运算
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<EditText
android:id="@+id/myeda"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 输入第一个数字..."
/>
<TextView
android:id="@+id/note"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/myedb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="输入第二个数字..."
/>
<TextView
android:layout_width="wrap_content"
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>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/mybutadd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
/>
<Button
android:id="@+id/mybutsub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
/>
<Button
android:id="@+id/mybutmul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="*"
/>
<Button
android:id="@+id/mybutdiv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="/"
/>
</LinearLayout>
</LinearLayout>
package com.richard.size;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
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 editnum1 = null;
private EditText editnum2 = null;
private Button butAdd = null;
private Button butSub = null;
private Button butMul = null;
private Button butDiv = null;
private int num1 = 0;
private int num2 = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.showView = (TextView) super.findViewById(R.id.mytext); //取得文本显示组件
this.editnum1 = (EditText) super.findViewById(R.id.myeda); //取得文本编辑组建
this.editnum2 = (EditText) super.findViewById(R.id.myedb); //取得文本编辑组件
this.butAdd = (Button) super.findViewById(R.id.mybutadd);
this.butSub = (Button) super.findViewById(R.id.mybutsub);
this.butMul = (Button) super.findViewById(R.id.mybutmul);
this.butDiv = (Button) super.findViewById(R.id.mybutdiv);
this.note = (TextView) super.findViewById(R.id.note);
this.butAdd.setOnClickListener(new AddListener()); //定义监听
this.butSub.setOnClickListener(new SubListener()); //定义监听
this.butMul.setOnClickListener(new MulListener()); //定义监听
this.butDiv.setOnClickListener(new DivListener()); //定义监听
this.editnum1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
MainActivity.this.editnum1.setText("");
}
});
this.editnum2.setOnClickListener(new OnClickListener(){
public void onClick(View v){
MainActivity.this.editnum2.setText("");
}
});
}
class AddListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1 = Integer.parseInt(MainActivity.this.editnum1.getText().toString());
MainActivity.this.num2 = Integer.parseInt(MainActivity.this.editnum2.getText().toString());
MainActivity.this.note.setText(" + ");
MainActivity.this.showView.setText(
String.valueOf(num1 + num2) //设置文本显示组件
);
}
}
class SubListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1 = Integer.parseInt(MainActivity.this.editnum1.getText().toString());
MainActivity.this.num2 = Integer.parseInt(MainActivity.this.editnum2.getText().toString());
MainActivity.this.note.setText(" - ");
MainActivity.this.showView.setText(
String.valueOf(num1 - num2) //设置文本显示组件
);
}
}
class MulListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1 = Integer.parseInt(MainActivity.this.editnum1.getText().toString());
MainActivity.this.num2 = Integer.parseInt(MainActivity.this.editnum2.getText().toString());
MainActivity.this.note.setText(" * ");
MainActivity.this.showView.setText(
String.valueOf(num1 * num2) //设置文本显示组件
);
}
}
class DivListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1 = Integer.parseInt(MainActivity.this.editnum1.getText().toString());
MainActivity.this.num2 = Integer.parseInt(MainActivity.this.editnum2.getText().toString());
MainActivity.this.note.setText(" / ");
MainActivity.this.showView.setText(
String.valueOf(num1 / num2) //设置文本显示组件
);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
显示效果不是很好,所以我们改变一下屏幕显示方向。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.richard.size"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.richard.size.MainActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
范例三:
明文显示密码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="请输入用户密码"
/>
<EditText
android:id="@+id/password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:password="true"
/>
<CheckBox
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false"
android:text="显示密码"
/>
</LinearLayout>
package com.richard.showpasswd;
import android.os.Bundle;
import android.app.Activity;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText password = null;
private CheckBox show = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.password = (EditText) super.findViewById(R.id.password);
this.show = (CheckBox) super.findViewById(R.id.show);
this.show.setOnClickListener(new OnClickListenerImpl());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class OnClickListenerImpl implements OnClickListener{
@Override
public void onClick(View v){
if(show.isChecked()){
MainActivity.this.password.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else{
MainActivity.this.password.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
}
}
小结
单击事件为View本身所定义的一种常见事件;
在使用单击事件可以使用内部类或者是匿名内部类的方式进行事件处理。