Button 监听器的实现——四种方法

来源:互联网 发布:xmind mac 激活码 编辑:程序博客网 时间:2024/05/22 09:46

Button基本属性


因为Button是TextView的子类,所以Button就继承了TextView中的各种属性。
常用的有 android:layout_width 设置宽度
android:layout_height 设置高度
android:text 设置按钮上的文本
android:background 设置背景颜色
android:textColor 设置文本颜色


监听器第一种实现方式(成员内部类)

这种方法在之前的文章中已经提到过,详情请看为View添加监听器
这里再具体的进行讲解:
为按钮添加监听器
- 第一步:XML布局文件中添加按钮控件并为其设置id
- 第二步:在java代码中(需要显示该控件的Activity中),通过setContentView,装载Button所在的XML布局
- 第三步:通过Button的id在Activity中获取到Button的对象(向下转型)
- 第四步:为button按钮添加监听事件
- a:创建内部类并实现OnClickListener接口
- b:重写onClick方法(当按钮被点击后想干什么)
- c:生成内部类的对象
- d:为按钮添加监听器


这里介绍一下吐司的使用方法:
1.当前界面对象(上下文环境),2.显示内容,3、吐司显示时长
Toast.makeText(MainActivity.this, "按钮被点击啦!!",Toast.LENGTH_SHORT).show();
这里写图片描述


监听器第二种实现方式(匿名内部类)

  • 第一步:获取Button对象
  • 第二步:直接调用button的setOnClickListener方法 ,在方法中,传入new OnClickListener(){onClick(){ }};
Javaimport android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class SecondActivity extends Activity {    private Button btn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_linearlayout);        btn=(Button) findViewById(R.id.btn01);        btn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                //当按钮点击时调用                Toast.makeText(SecondActivity.this, "按钮被点击(匿名内部类)", Toast.LENGTH_LONG).show();            }        });    }}

这里写图片描述

匿名内部类以及内部类形式,这两种方式在开发中最常用,但匿名内部类这种方式使用的是最频繁的,因为通常来讲,我们为按钮设置监听器,是一个单一的事件,并不需要重复调用。


添加监听器方式(Activity)

直接让Activity实现OnClickListener接口,去重写其中的onClick方法。

Javaimport android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class ThirdActivity extends Activity implements OnClickListener {    private Button btn;        @Override        protected void onCreate(Bundle savedInstanceState) {            // TODO Auto-generated method stub            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_linearlayout);            btn = (Button) findViewById(R.id.btn01);            btn.setOnClickListener(this);        }        @Override        public void onClick(View arg0) {            // 当按钮被点击时调用            Toast.makeText(ThirdActivity.this, "按钮已被点击(Activity直接实现接口)", Toast.LENGTH_LONG).show();        }}

这种方式看起来很简单,实现起来步骤也比较短,但是需要注意的是,当前Activity是一个界面,里面会有各种逻辑方法以及实现各种接口,如果通过Activity直接实现OnClickListener接口,在以后编写比较复杂的界面时,可能会出现看上去比较混乱的情况,所以在界面比较复杂的时候不推荐这种方式。


添加监听器方式(XML)

  • 在XML布局文件中找到Button控件,添加android:onClick="MyButtonClick",属性值中的内容是自定义的名字。
  • 在对应的Activity中,创建一个以onClick属性值为名字的方法,该方法修饰符为public,返回值为void,传入的参数为View类型。

最后一种方式是最简单,代码量最少的一种实现方式。但是使用很少,因为灵活性比较差。


多个按钮使用一个监听器

1. 使用匿名内部类为多个按钮添加监听器
这么做的缺点是每有一个按钮,就要相应生成一个匿名内部类,浪费资源。

JAVAimport android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.Toast;public class FifthActivity extends Activity {    private Button btn1, btn2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_linearlayout);        btn1 = (Button) findViewById(R.id.btn01);        btn2 = (Button) findViewById(R.id.btn02);        btn1.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                Toast.makeText(FifthActivity.this, "点击了第一个按钮",                        Toast.LENGTH_SHORT).show();            }        });        btn2.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                Toast.makeText(FifthActivity.this, "点击了第二个按钮",                        Toast.LENGTH_SHORT).show();            }        });    }}

另一种是创建内部类实现OnClickListener接口,在onCick方法中,通过switch(R.id.xxx)方式区别当前被点击的按钮是哪个,好处是节省资源。

JAVApublic class SixthActivity extends Activity {    private Button btn01, btn02;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_linearlayout);        btn01 = (Button) findViewById(R.id.btn01);        btn02 = (Button) findViewById(R.id.btn02);        ButtonListener btnButtonListener = new ButtonListener();        btn01.setOnClickListener(btnButtonListener);        btn02.setOnClickListener(btnButtonListener);    }    class ButtonListener implements OnClickListener {        @Override        public void onClick(View arg0) {            switch (arg0.getId()) {            case R.id.btn01:                Toast.makeText(SixthActivity.this, "已点击第一个按钮",                        Toast.LENGTH_SHORT).show();                break;            case R.id.btn02:                Toast.makeText(SixthActivity.this, "已点击第二个按钮",                        Toast.LENGTH_SHORT).show();                break;            }        }    }}

原创粉丝点击