目录
-
1.Button的继承关系
-
2.Button 点击事件
-
3.Button 简单使用举例
-
4.自定义Button选择器
具体操作
一、Button的继承关系
Button继承TextView,其具体关系如下:
>java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
二、Button 点击事件
实现Button点击事件的方法(一)-onClick 属性
1.在xml文件配置一个onClick属性,设置一下点击事件的方法名
-
xml
布局使用
-
java
代码中点击实现 效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void login(View view){
System.out.println("点击了");
}
}
实现Button点击事件的方法(二)-通过java代码实现
-
xml
布局使用
-
java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
//给按钮添加点击事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因为view里面没有Button类型,所以使用的时候转换为对应的子类类型
Button btn=(Button)view;
//更改按钮的标题
btn.setText("退出");
}
}
!!!按钮的点击事件 通常接收一个参数:View . 当按钮被点击,系统接收这个事件,并把这个事件回调给监听者
三、Button 简单使用举例
Button简单小demo(一)
实现一个按钮(比如:按钮的标题是
Done
,点击一下后标题就变成了Edit
,类似这样,随着不同的点击,按钮的标题在Done
和Edit
之间不断的切换)
- 第一种方法:
1.xml
布局使用
2.java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
//给按钮添加点击事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因为view里面没有Button类型,所以使用的时候转换为对应的子类类型
Button btn=(Button)view;
if(btn.getText().equals("Edit")){
//更改按钮的标题
btn.setText("Done");
}else{
btn.setText("Edit");
}
}
}
该方法是有局限的,因为不能保证程序里面一定是文本!!!
- 第二种方法:(添加一个boolean变量)
1.xml
布局使用
2.java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
boolean isnormal=true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
//给按钮添加点击事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因为view里面没有Button类型,所以使用的时候转换为对应的子类类型
Button btn=(Button)view;
//判断状态
if(isnormal){
btn.setText("Done");
}else{
btn.setText("Edit");
}
isnormal=!isnormal;
}
}
这个方法可能还不太好。因为无形之中添加了一个boolean变量,可能会出现一个问题:按钮的状态不能直接被知道,而是要通过boolean变量是True还是false,间接被知道
- 第三种方法:(按钮本身自动获取按钮自己的点击状态,通过添加一个Tag值)
1.xml
布局使用
-
java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
//给按钮添加点击事件
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因为view里面没有Button类型,所以使用的时候转换为对应的子类类型
Button btn=(Button)view;
if(btn.getTag().equals(1)){
btn.setText("Done");
btn.setTag("0");
}else{
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 这样不行
}
}
}
设置tag值的时候,tag值应该用双引号括起来.
例如:
btn.setTag("1"); 正确
btn.setTag(1); 错误
Button简单小demo(二)
在demo(一)的基础上,再设置两个按钮,实现点击其中一个按钮,则另一个按钮才有效(才能点击),否则该按钮无效
- 第一种方法
1.xml
布局使用
2.java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn;
Button done;
Button edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
done=findViewById(R.id.bt_done );
edit=findViewById(R.id.bt_edit);
//给按钮添加点击事件
btn.setOnClickListener(this);
done.setOnClickListener(this);
edit.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//因为view里面没有Button类型,所以使用的时候转换为对应的子类类型
Button btn=(Button)view;
if(btn.getId()==R.id.bt_login) {
if (btn.getTag().equals(1)) {
btn.setText("Done");
btn.setTag("0");
} else {
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 这样不行
}
}
if(btn.getId()==R.id.bt_edit){
done.setEnabled(true);
edit.setEnabled(false);
}
if(btn.getId()==R.id.bt_done){
done.setEnabled(false);
edit.setEnabled(true);
}
}
- 第二种方法
xml
中代码和第一种方法一样
java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn;
Button done;
Button edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
done=findViewById(R.id.bt_done );
edit=findViewById(R.id.bt_edit);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (btn.getTag().equals(1)) {
btn.setText("Done");
btn.setTag("0");
} else {
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 这样不行
}
}
});
done.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
done.setEnabled(false);
edit.setEnabled(true);
}
});
edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
done.setEnabled(true);
edit.setEnabled(false);
}
});
- 第三种方法(使用lamda表达式)
1.xml
中代码和第一种方法一样
2.java
代码中点击实现效果
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
Button btn;
Button done;
Button edit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//通过id号找到按钮
btn=findViewById(R.id.bt_login);
done=findViewById(R.id.bt_done );
edit=findViewById(R.id.bt_edit);
btn.setOnClickListener(view -> {
if (btn.getTag().equals(1)) {
btn.setText("Done");
btn.setTag("0");
} else {
btn.setText("Edit");
btn.setTag("1");// btn.setTag(1); 这样不行
}
});
done.setOnClickListener(view->{
done.setEnabled(false);
edit.setEnabled(true);
});
edit.setOnClickListener(view -> {
done.setEnabled(true);
edit.setEnabled(false);
});
}
4.自定义Button选择器
1.xml
布局使用
2.Button
背景选择器实现
新建一个配置文件
drawable->new->Drawable resource file