本文为原创博文,转载请注明原地址,http://blog.youkuaiyun.com/hi_noob/article/details/51144167,同时感谢您的分享.
实现安卓的点击事件就是要去实现onclickListener(点击事件监听的接口),android中实现onclickListener有四种不同的实现方法,每一种的实现方法对应的书写方法不同,但是本质都是实现onclickListener接口中的onClick()方法。今天我们来细说一下android的点击事件实现方法。
一、准备工作,先画布局:
(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"
tools:context="com.noob.dialdemo.DialActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_title" />
<View
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_marginTop="2dp" />
<EditText
android:id="@+id/et_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:hint="@string/hint"/>
<Button
android:id="@+id/bt_dial"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/dial"
android:onClick="dial"/>
</LinearLayout>
(2)布局文件中用到的strings.xml文件
<resources>
<string name="app_name">Dial Demo</string>
<string name="app_title">电话拨号器</string>
<string name="dial">拨号</string>
<string name="hint">请输入号码</string>
</resources>
二、完成布局,下面开始详细介绍每一种实现方法:
1、使用内部类的方法来实现onclickListener接口
public class DialActivity extends Activity {
private EditText mNumber;
private Button mDial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dial);
initView(); //初始化布局控件,在这个方法里面找到需要的控件
initListener();//初始化点击事件,在这个方法里设置控件的点击事件
}
private void initListener() {
mDial.setOnClickListener(new MyDialListener());
}
private void initView() {
mNumber = (EditText) findViewById(R.id.et_number);
mDial = (Button) findViewById(R.id.bt_dial);
}
/**
* 内部类实现点击事件的监听
*/
public class MyDialListener implements View.OnClickListener {
@Override
public void onClick(View v) {
// 获得输入框中的号码
String number = mNumber.getText().toString().trim();
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
//Uri.parse("tel:"+***)拨打电话固定写法,原因是android的底层封装
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
}
}
2、使用匿名内部类来实现点击事件
public class DialActivity extends Activity {
private EditText mNumber;
private Button mDial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dial);
initView(); //初始化布局控件,在这个方法里面找到需要的控件
initListener();//初始化点击事件,在这个方法里设置控件的点击事件
}
private void initListener() {
/**
* 匿名内部类实现点击事件的监听
*/
mDial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 获得输入框中的号码
String number = mNumber.getText().toString().trim();
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
});
}
private void initView() {
mNumber = (EditText) findViewById(R.id.et_number);
mDial = (Button) findViewById(R.id.bt_dial);
}
}
3、当前类直接实现onclickListener接口
应用场景:
界面上的按钮比较多,或者如果通过内部类或者匿名内部类代码看起来比较臃肿的时候,一般开发都使用这种方式来实现。
/**
*当前类直接实现OnClickListener接口
*/
public class DialActivity extends Activity implements View.OnClickListener{
private EditText mNumber;
private Button mDial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dial);
initView(); //初始化布局控件,在这个方法里面找到需要的控件
initListener(); //初始化点击事件,在这个方法里设置控件的点击事件
}
private void initListener() {
mDial.setOnClickListener(this);
}
private void initView() {
mNumber = (EditText) findViewById(R.id.et_number);
mDial = (Button) findViewById(R.id.bt_dial);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.bt_dial:
// 获得输入框中的号码
String number = mNumber.getText().toString().trim();
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
// Uri.parse("tel:"+***) 拨打电话固定写法,原因是android的底层封装
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
break;
// case R.id.控件 :
// break;
// ... ...
default:
break;
}
}
}
4、在布局文件中加入控件的可点击属性——onClick属性
前期的准备工作中,已经加入了该属性,在代码中直接写相同属性名的方法名即可,而不用实现onclickListener接口。
public class DialActivity extends Activity {
private EditText mNumber;
private Button mDial;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dial);
initView(); //初始化布局控件,在这个方法里面找到需要的控件
}
private void initView() {
mNumber = (EditText) findViewById(R.id.et_number);
mDial = (Button) findViewById(R.id.bt_dial);
}
// 相同属性名的方法名
public void dial(View v){
// 获得输入框中的号码
String number = mNumber.getText().toString().trim();
Intent intent = new Intent();
intent.setAction(intent.ACTION_CALL);
// Uri.parse("tel:"+***) 拨打电话固定写法,原因是android的底层封装
intent.setData(Uri.parse("tel:" + number));
startActivity(intent);
}
}
以上就是android的点击事件的四种实现方法以及书写格式。
今后我会在我的博文中全部采用第三种的实现方式来发表后续的博文,在文章中如有不足的地方,还望大家能批评指正,让我们一同进步,感谢大家的支持!