美文网首页
【Android程序开发】Button使用详解

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

作者: 宁晓鸯 | 来源:发表于2019-10-03 15:18 被阅读0次

    目录

    • 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布局使用
         <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
    
            android:text="Edit"
            android:textColor="#ff0000"
            android:textSize="25sp"
            android:onClick="login"
           />
    
    • 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布局使用
    <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"
           />   
    
    • 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,类似这样,随着不同的点击,按钮的标题在DoneEdit之间不断的切换)

    未命名文件.jpg
    • 第一种方法:
      1.xml布局使用
        <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");
            }
         }
    }
    

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

    • 第二种方法:(添加一个boolean变量)
      1.xml布局使用
        <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
    • 第三种方法:(按钮本身自动获取按钮自己的点击状态,通过添加一个Tag值)
      1.xml布局使用
       <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
    • 第一种方法
      1.xml布局使用
     <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);
            }
        }
    
    • 第二种方法
      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布局使用

     <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>
    

    相关文章

      网友评论

          本文标题:【Android程序开发】Button使用详解

          本文链接:https://www.haomeiwen.com/subject/oqbkpctx.html