Button
a.基本信息
继承于TextView,具有其一切属性
b.作用
用于响应用户的点击操作,完成相应的事件
c.用法
在代码中注册监听器View.onClickListener
a.内部类(名字解释:在最外面的MainActivity类中新建Listener类——一个类包含另一个类)
public class MainActivity extends Activty{
//.1.声明控件
private Button btnTest;
@Override
protected void onCreate(Bundle savedInstanceState){
super.oncreate(savedIntanceState);
setContentView(R.layout.activity_main);//加载布局文档
//2.关联控件
btnTest=(Button)findViewById(R.id.button1);//为使用具有普遍性规定finViewByID得到的都是View对象,若赋值需转化成相应类型
//3.代码注册监听
Listener listener=new Listener();
//下面这个是Button类的方法,当Button类的变量对应的按钮被点击时会实现该方法
btnTest.setOnClickListener(Listener//需要开发者传入 实现接口view.onClickListener的类对象所以我们需要自己创建一个类);
}
class Listener implements View.onClickListener{
@override
public void onClick(View v //View类型的形参){
//设置点击后发生的事情
Log.i("Text","被点击了");
}
}
}
//创建Button控件 在onCreate方法中将创建的Button控件和布局中的id关联 为实现这个Button的setOnClickListener(传实现view接口的类)方法让其点击后有反应(原来没有?)
我们自己创一个实现view接口的Listener类 重写view下系统自带类没有的onclick方法 加入点击事件 这样就加入了点击效果 最后setOnClickListener方法可以实现了
换句话说就是建一个Listener类 new出一对象listener 把这个对象传给setOnClickListener方法
setOnClickListener方法负责响应点击去执行listener lsitener负责编辑点击后作的事件
ps:一切的目的都是为了实现setOnClickListener
2.匿名类
目的一样,也是我们要去给setOnClickListener方法传参数
这次我们不创建新类而是把直接new出(形参要求的)对象
//创建新类的过程省略
btn.setOnClcikListener(new View.OnClickListener){
@Override
public void onClick(View v){
log.i("Text",“以匿名类的方式实现点击”)
}
}
3.XML设置android:onClick(原理暂时没明白)
第一步:xml文件中添加
<Button
……(button的基本属性)
android:onClick=“Click”
/>
第二步:java文件回调click方法
在MainActivity类中添加:
public void click(View v){
log.i("Text","以xml的方式完成点击")
}
PS:比较
1.直接setOnClickListener.
如果你的activity中只有少量的三两个按钮 适合使用
2.implement OnClickListener 实现这个接口
这适合多个按钮,比如计算器、虚拟键盘等 使用这个可以减少代码量,直接根据按钮的ID去添加事件
3. 在xml中写onClick
这可以使你的代码很清晰,你可以把所有的按钮事件写在一个文件里面,想用的时候可以在xml文件里直接调用 使代码看上去更有层次感。
三种方式各有利弊,根据情况选择使用。