三个月前初学Android时,公司要求我们刚入职的应届小白写知识分享,于是结合实操的Demo写了一篇关于Button点击事件的分享。因为是初学的缘故,所以当时写的很细,恨不得把每一个操作步骤都写进去,趁着今天周末,就又整理了一下。希望能帮到和当初的我一样的Android初学者。
下面是这篇分享:
Button是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。Button实现点击事件有三种常用的实现方式,三种方法的具体实现步骤如下所示。
方法一:指定Button的onClick属性方式
- 首先在layout文件中指定onClick属性:
android:onClick=”click”
- 然后在Activity中实现这个click方法
1. public void click(View v){
Log.i(“指定onClick属性方式”,”button is clicked”);
}
注意:Activity中实现的方法名称要与onClick属性设置的名称一致。
Demo:
我们首先创建一个项目ButtonDemo01,并将主活动命名 MainActivity,接着在布局文件中放入一个Button按钮和一个TextView。Button按钮用于点击事件实现,TextView通过内容的变化,用于直观的展示点击效果。最后在Button按钮中添加一行属性,即android:onClick=”click”.
布局文件具体内容如下图所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮被点击了么" />
<Button
android:id="@+id/btn_onclick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click"
android:text="onClick方式" />
</LinearLayout>
Button按钮中添加完属性后,我们则需在MainActivity中将Button中指定的方法写出,即click方法,这个方法用于实现将页面中TextView中的内容进行改变。于是首先我们定义TextView变量并通过findViewById方法对其进行赋值,然后就可以在click中使用该变量调用setText方法对TextView的值进行修改。
需要注意的是,我们在调用findViewById方法时,需进行强制的类型转换。
完整的MainActivity代码实现如下所示:
public class MainActivity extends AppCompatActivity {
private TextView tv_show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
tv_show=(TextView)findViewById(R.id.tv_show);
}
public void click(View v){
tv_show.setText("Onclick方式处理事件.");
}
}
运行一下程序,该布局文件显示效果如下图所示:
当我们点击“ONCLICK方式”按钮时,TextView中的内容变成了“OnClick方式处理事件”,效果如下图所示:
即事件的处理成功通过设置onClick属性的方式得以实现。
方法二:匿名内部类方式
在Activity中添加匿名内部类
btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Log.i(“匿名内部类方式”,”button is clicked”);
}
});
即首先要找到需要点击的Button名字,随后给它添加一个事件监听setOnClickListener,当Button被点击后就会被成功监听,随后其中的onClick方法会被调用。
Demo:
我们首先创建一个项目ButtonDemo02,并将主活动命名 MainActivity,接着在布局文件中放入一个Button按钮和一个TextView。Button按钮用于点击事件实现,TextView通过内容的变化,用于直观的展示点击效果。实现方式与方法一致,布局文件具体内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮被点击了么?" />
<Button
android:id="@+id/btn_anonymous"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="匿名内部类方式" />
</LinearLayout>
接下来我们需要做的是在MainActivity中添加具体实现代码。此时除了定义TextView变量之外,我们还需定义Button变量,再通过findViewById方法对变量进行赋值。变量定义并赋值后,我们则可以开始为Button按钮添加事件监听,即使用按钮的变量值调用事件监听setOnClickListener。
需要注意的是,OnClickListener()是一个接口,对于我们初学者来说,这里给人的感觉是new了一个接口,其实不是这样的。new的话它肯定是new了一个类的对象,而这个类是实现了OnClickListener接口,所以之所以叫匿名内部类,是因为创建了一个类的对象,但是这个类的名字是什么我们并不知道,所以叫匿名的内部类对象。
接下来和方法一中一样,我们需在onClick方法中调用setText方法实现TextView中的内容变化。完整的MainActivity代码实现如下所示:
public class MainActivity extends AppCompatActivity {
private TextView tv_show;
private Button btn_anonymous;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
tv_show= (TextView)findViewById(R.id.tv_show);
btn_anonymous=(Button)findViewById(R.id.btn_anonymous);
btn_anonymous.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv_show.setText("匿名内部类处理事件");
}
});
}
}
运行一下程序,布局文件显示效果如下图所示:
点击其中的“匿名内部类方式”按钮,则TextView中的文字发生了改变,表示匿名内部类方式点击事件的成功实现。效果如下图所示:
方法三:接口方式
- 首先当前Activity实现OnClickListener接口
1. Public class MainActivity extends Activity implements onClickListener();
- 然后实现接口方法
1. @Override
public void onClick(View v){
Log.i(“接口方式”,”button is clicked”);
}
- 最后绑定到Button上
3. btn.setOnClickListener(this);
步骤(3)这边需要说明的是,使用方法二匿名内部类方法的时候,括号里创建了一个对象,而这边可以使用this,是因为我们在这个地方的setOnClickListener它需要的是一个对象,这个对象有一个特殊的要求,就是必须要实现onClickListener接口的一个对象,而我们的MainActivity实现了onClickListener接口,所以MainActivity这个对象就是满足要求的,可以放入其中。
Demo:
我们首先创建一个项目ButtonDemo03,并将主活动命名 MainActivity,接着在布局文件中放入一个Button按钮和一个TextView。Button按钮用于点击事件实现,TextView通过内容的变化,用于直观的展示点击效果。实现方式与前两种方法一致,布局文件具体内容如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="按钮被点击了么?" />
<Button
android:id="@+id/btn_interface"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="接口方式" />
</LinearLayout>
接下来我们开始具体的实现过程。首先还是在MainActivity中先定义和赋值两个对象变量,方法与之前的方法一、方法二中的完全一致。接下来我们要给Button添加事件监听,于是首先让MainActivity类实现View.OnClickListener,并且通过键盘的alt和enter直接添加接口的onClick方法,在onClick方法中使用setText方法实现文本内容的改变。最后我们在onCreate方法中使用Button的变量调用setOnClickListener(this),这样便完成了Button按钮事件监听的一个处理过程。
/**
* 方法三:采用接口方式处理事件
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ //首先让MainActivity实现接口,然后定义onClick方法
private TextView tv_show;
private Button btn_interface;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
tv_show=(TextView)findViewById(R.id.tv_show);
btn_interface=(Button)findViewById(R.id.btn_interface);
btn_interface.setOnClickListener(this); //接着添加一个事件监听,然后将MainActivity这个对象自己放入,即this
}
@Override
public void onClick(View v) {
tv_show.setText("接口方式处理事件。");
}
}
接着我们运行程序,效果如下图所示:
点击其中的“接口方式”按钮,则TextView中的文字发生了改变,表示接口方式点击事件的成功实现。效果如下图所示: