Android基础控件Button
Button组件在UI中显示是一个按钮,用来执行用户点击事件的;我们可以通过四种形式为Button设置监听事件来实现其要处理的事情。(不过其中内部类和外部类差不多,就以外部类为例,不再累述内部类的形式)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/linearlayout1" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:background="#00FF00" android:text="匿名内部类实现"/> <Button android:id="@+id/btn2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:background="#FF0000" android:text="外部类实现"/> <Button android:id="@+id/btn3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:background="#0000FF" android:text="实现View.OnClickListener接口"/> </LinearLayout>
首先我们在布局中创建btn1, btn2, btn3三个按钮,现在可以看到显示效果如左下:

然后再分别以下列形式为界面中三个按钮实现事件监听器。
1. 匿名内部类的形式:
//以匿名内部类的形式实现Button1的事件监听器 btn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "该按钮是以匿名内部类的形式实现的", Toast.LENGTH_LONG).show(); } });
当然在使用组件之前要先获取组件名,先在类中声明了三个Button类型的按钮private Button btn1, btn2, btn3;然后在onCreate()方法中通过findViewById()方法获取在布局文件中定义的组件。关于findViewById(),它返回的是一个View的对象,因为所有的组件都是View的直接或间接子类。所以需要强制类型转换得到Button组件。
然后以上述代码完成事件监听。在代码的OnClick()方法中使用Toast.makeText()方法产生一条消息。第一个参数是个context上下文,第二个参数为消息内容,第三个为显示消息的时间长短。最后调用show()方法完成显示。
点击该按钮,实现效果如右上图所示
2. 外部类监听事件形式:
既然是外部类,所以先要在项目中创建另一个类(或者是该MainActivity中再创建一个类也行),如OuterClass,要设置按钮的点击事件,所以需要为该类实现OnClickListener接口,并且实现其onClick()方法。
public class OuterClass implements View.OnClickListener { @Override public void onClick(View v) { Log.i("TAG", "该按钮是以外部类的形式实现的"); } }
外部类创建完毕之后,就要在MainActivity中为按钮调用setOnClickListener()方法,然后里面的形式又是匿名类。可以看到,在OnClick()方法中,首先调用父类onClick()方法,然后再完成自己的事件逻辑。
//以外部类的形式实现事件监听器 btn2.setOnClickListener(new OuterClass() { @Override public void onClick(View v) { super.onClick(v); Toast.makeText(MainActivity.this, "该按钮是以外部类的形式实现的", Toast.LENGTH_LONG).show(); } });
所以,当有很多的组件需要实现共同的功能时,可以通过外部类的形式,在外部类的onClick()方法中实现共同的功能。运行结果如左下图所示。
其实外部类的形式我觉得有点像是匿名内部类和下面实现OnClickListener接口的两种方式的杂糅。

3. 实现OnClickListener接口形式:
关于实现该接口,注意是android.view.View包下的OnClickListener接口,因为还存在一个android.content.DialogInterface包下的。实现完接口顺带着实现该接口的onClick()方法。然后在该方法中实现处理事件。
public class MainActivity extends Activity implements View.OnClickListener { ... @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "该按钮是以实现OnClickListener接口的形式实现的", Toast.LENGTH_LONG).show(); } }
在onCreate()方法中,按钮仍然要调用setOnClickListener()方法,不过此时这里面的参数输入this即可。
//以实现OnClickListener接口的形式实现事件监听器
btn3.setOnClickListener(this);
点击效果如右上图所示
4. 内部类形式:
既然有外部类实现,那么当然也有内部类实现。这里就不过多的输入代码了,毕竟对比于外部类只是一个类是放在外面,一个类是作为内部类实现的。具体的代码和外部类一致。
关于Button组件,我觉得可以和ImageButton放在一起来讲,只是其中一个是放的文本,一个放的是图片。
|
属性 |
Button |
ImageButton |
|
android:text |
有,为按钮设置显示的文字描述 |
无,写上也不会报错,只是没效果 |
|
android:src |
无,写上也不会报错,只是没效果 |
有,并且随设置的按钮宽度和高度的变化自适应 |
|
android:background |
设置按钮的背景颜色,也可以是背景图片 |
设置图片按钮的背景颜色,也可以是背景图片;随按钮的宽度和高度变化而被拉伸 |
如果像让图片按钮显示的是文字信息,只能是将src属性中的图片弄成文字图片。
ImageButton同样也有onClick()监听事件,并且同样可以以上述方式实现监听器。
posted on 2016-07-19 16:59 Rocking7189 阅读(188) 评论(0) 收藏 举报
浙公网安备 33010602011771号