按键监听实现的三种方法:
- 匿名内部类监听按键点击事件
- 外部类监听按键点击事件
- 接口方式监听按键点击事件
匿名内部类监听按键点击事件
1.先声明一个private Button Btn; (几乎所有的监听都是类似的前两步)
2.再在重写的OnCreate函数里初始化Btn = (Button)findviewByid(R.id.Btn);(几乎所有的监听都是类似的前两步)
3.然后在重写的OnCreate函数里设置按键监听
Btn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) { } });
public class MainActivity extends AppCompatActivity{
private Button Btn;//第一步声明一个按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Btn = (Button) findViewById(R.id.Button);//第二步初始化这个按钮
//第三步设置监听器
Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
外部类监听点击事件
1.前几步都是一样的。
2.重写定义一个外部类,(在工程中重新建一个Activity的那种类)或直接在在本类下写一个外部类。
class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
v.setAlpha(0.5f);
}
}
3.设置监听函数是不一样的,new的是一个新建的外部类
Btn.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View v) {
super.onClick(v);//外部类中的处理
}
public class MainActivity extends AppCompatActivity{
private Button Btn;//第一步声明一个按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Btn = (Button) findViewById(R.id.Button);//第二步初始化这个按钮
//第三步设置监听器
//注意设置的监听器,new的那个类是自己新建的外部类
//这也是这种方法的由来
Btn.setOnClickListener(new MyOnClickListener(){
@Override
public void onClick(View v) {
super.onClick(v);
}
});
}
}
/**
*定义的一个专门用于监听处理的外部类
*一般另外建一个Activity类文件,不建议建在同一个Activity类下面
*这个外部类虚拟继承了一个View.OnClickListener
*这个和“接口方式。。”主类继承的是同一个,性质也是一样的
*/
class MyOnClickListener implements View.OnClickListener{
@Override
public void onClick(View v) {
v.setAlpha(0.5f);//设置透明度,即任何被按下的按钮都会透明度降低(通过V来确定具体哪个按钮)
}
}
接口方式监听按键点击事件
1.先在主类的名前虚拟继承 implements View.OnClickListener
2.并重写方法 OnClick()
3.在重写的OnCreate函数里初始化按键,并声明按键点击事件监听函数
Btn.setOnClickListener((View.OnClickListener) this);(注意与第一种方法的区别)
4. 再在重写的OnClick函数里面利用if(v == Btn )的方式或switch case的方式实现分类处理按键点击事件。
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//注意!!!该类虚拟继承了一个接口,这也是这种方法的由来
private Button Btn;//第一步声明一个按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Btn = (Button) findViewById(R.id.Button);//第二步初始化这个按钮
Btn.setOnClickListener((View.OnClickListener) this);//第三步声明点击监听函数
}
/**
*第四步,重写点击函数
*个人认为这种方法的最大的优点就是,OnCreate函数里代码要简洁一点
*/
@Override
public void onClick(View v) {
// switch (v.getId()){
// case R.id.Btn1:
// Toast.makeText(this,"Btn1被按下",Toast.LENGTH_SHORT).show();
// break;
// case R.id.Btn2:
// Toast.makeText(this,"Btn2被按下",Toast.LENGTH_SHORT).show();
// break;
// }
if(v == Btn){
Toast.makeText(this,"Btn被按下!",Toast.LENGTH_SHORT).show();
}else if(v == imageBtn){
Toast.makeText(this,"imageBtn被按下!",Toast.LENGTH_SHORT).show();
}
}
}