1.在布局文件中指定onClick属性的方式设置点击事件
这里就是通过布局文件中Button控件的属性值onClick="click"实行回调函数click,代表着点击按钮有click方法响应。
回调函数代码如下,首先要通过id找到对应的按钮
myBtn_one.findViewById(R.id.btn_one);
要实现findViewById和后面的click函数得将btn设置成全局变量,同时因为是要实现按钮的点击,还需要一个强转类型具体代码如下:
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.btn);
btn=(Button)findViewById(R.id.btn_one);
}
public void click(View view){
btn.setText("按钮一已经被点击");
}
}
全局变量与局部变量
全局变量也称为外部变量,它是在函数外部定义的变量。它不属于任何一个函数,它属于一个源程序文件。其作用域是整个源程序。
全局变量和局部变量相关内容:https://www.cnblogs.com/lzjdsg/p/10146480.html
2.匿名内部类的方法设置点击事件
public class MainActivity extends AppCompatActivity {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.btn);
btn=(Button)findViewById(R.id.btn_one);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn.setText("按钮一已经被点击");
}
});
}
因为我java也没有学好,还是个小白,为了还之前欠下的学债努力学习,后面我会更加完善java里面的各部分知识做成博客。这里主要提供代码。
Activity实现OnClickListener接口的方式设置点击事件
btn = (Button) findViewById(R.id.btn_one);
btn.setOnClickListener(this);
和上面一样通过ID找到该按钮,this代表当前这个Activity,但是setOnClickListener这个方法要接收一个onClick这个接口类型,所以可以通过Activity这个类来实现onClick这个接口类型
public class MainActivity extends AppCompatActivity implements View.OnClickListener
然后就会调用onClick这个方法,当点击后就会输出“按钮一已被点击的信息”
public void onClick(View v) {
btn.setText("按钮一已被点击");
}
具体完整代码如下:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.btn);
btn = (Button) findViewById(R.id.btn_one);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
btn.setText("按钮一已被点击");
}
}
总结
这里主要是浅谈了一下为Button控件设置点击事件的三种方式,分别是:
1.通过布局文件中onClick属性click回调函数click实现点击,这是Android特有的新方法。
2.使用匿名内部类的方法设置点击事件。
3.Activity实现OnClickListener接口的方式设置点击事件,也就是将当前Activity实现View.OnClickListener接口。
有了上面自己列举这几个简单的代码来举例,书上的代码也就只是把一个按钮变成了三个按钮,也就挺容易理解的了。
书上代码如下:
package com.example.button;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn_one,btn_two,btn_three;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.button);
btn_one=(Button)findViewById(R.id.btn_one);
btn_two=(Button)findViewById(R.id.btn_two);
btn_three=(Button)findViewById(R.id.btn_three);
btn_three.setOnClickListener(this);
btn_one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_one.setText("按钮一已经被点击");
}
});
}
public void click(View view){
btn_two.setText("按钮二已经被点击");
}
public void onClick(View v){
switch (v.getId()){
case R.id.btn_three:
btn_three.setText("按钮三已经被点击");
break;
}
}
}
第一个按钮就是用的第二种方法,第二个按钮就是用的第一种方法,第三个按钮就是用的第三种方法。
第三个按钮onClick函数中还使用了switch语句,来判断是哪个按钮被点击,其实,可以直接用这种switch语句写三个按钮的点击事件。代码如下:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn_one,btn_two,btn_three;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.button);
btn_one=(Button)findViewById(R.id.btn_one);
btn_two=(Button)findViewById(R.id.btn_two);
btn_three=(Button)findViewById(R.id.btn_three);
btn_one.setOnClickListener(this);
btn_two.setOnClickListener(this);
btn_three.setOnClickListener(this);
}
//具体判断一下点击的是哪个按钮
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_one:
btn_one.setText("按钮一已经被点击");
break;
case R.id.btn_two:
btn_two.setText("按钮二已经被点击");
break;
case R.id.btn_three:
btn_three.setText("按钮一已经被点击");
break;
}
}
}