【Android程序开发】Button使用详解

2019-10-03  本文已影响0人  宁晓鸯

目录

具体操作

一、Button的继承关系

Button继承TextView,其具体关系如下:

>java.lang.Object
   ↳    android.view.View
       ↳    android.widget.TextView
           ↳    android.widget.Button
二、Button 点击事件
实现Button点击事件的方法(一)-onClick 属性

1.在xml文件配置一个onClick属性,设置一下点击事件的方法名

     <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="Edit"
        android:textColor="#ff0000"
        android:textSize="25sp"
        android:onClick="login"
       />
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代码实现
<Button
        android:id="@+id/bt_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="Edit"
        android:textColor="#ff0000"
        android:textSize="25sp"
       />   
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,类似这样,随着不同的点击,按钮的标题在DoneEdit之间不断的切换)

未命名文件.jpg
    <Button
        android:tag="1"
        android:id="@+id/bt_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="Edit"
        android:textColor="#ff0000"
        android:textSize="25sp"
       />

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");
        }
     }
}

该方法是有局限的,因为不能保证程序里面一定是文本!!!

    <Button
        android:tag="1"
        android:id="@+id/bt_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="Edit"
        android:textColor="#ff0000"
        android:textSize="25sp"
       />

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,间接被知道

未命名文件(1).jpg
   <Button
        android:tag="1"
        android:id="@+id/bt_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="Edit"
        android:textColor="#ff0000"
        android:textSize="25sp"
       />
  1. 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(一)的基础上,再设置两个按钮,实现点击其中一个按钮,则另一个按钮才有效(才能点击),否则该按钮无效


未命名文件(2).jpg
 <Button
        android:tag="1"
        android:id="@+id/bt_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:text="Edit"
        android:textColor="#ff0000"
        android:textSize="25sp"
       />
    <Button
        android:id="@+id/bt_done"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="完成"
        android:layout_below="@+id/bt_login"
        android:layout_marginTop="20dp"
        android:enabled="false"/>
    <Button
        android:id="@+id/bt_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="编辑"
        android:layout_alignTop="@+id/bt_done"
        android:layout_alignRight="@+id/bt_login"
        />

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);
        }
    }
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);
            }
        });
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布局使用

 <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="分享"
        android:textColor="@drawable/test_color" />

2.Button背景选择器实现

新建一个配置文件
drawable->new->Drawable resource file

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!--按下状态的颜色 pressed-->
    <item android:color="#ff0000"
        android:state_pressed="true"/>
    <!--无效 无法点击的颜色 enable-->
    <item android:color="#00ff00"
        android:state_enabled="false"/>
    <!--默认状态-->
    <item android:color="#000000"/>
</selector>
上一篇下一篇

猜你喜欢

热点阅读