Android Studio 学习记录-按钮控件(Button)

目录

按钮控件(Button)

        textAllCaps属性

        onClick属性

点击事件和长按事件

禁用与恢复按钮


        本文介绍按键控件的常见用法,包括:如何设置大小写属性,如何响应按钮的点击事件和长按事件,如何禁用按钮又该如何启用按钮,等等。

按钮控件(Button)

        textAllCaps属性

        对textView来说,text属性设置什么文本就显示什么文本。但对Button来说,text属性字母不管设置大写还是小写,都默认转成大写

        想要不转换成大小需补充textAllCaps属性,该属性默认值为true,表示全都转换为大写,如果设置为false,则表示不转为大写。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivityButton">
    <TextView
        android:id="@+id/tv_btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tv_btn1"
        android:textColor="#000000"
        android:layout_marginTop="10dp"
        android:layout_centerHorizontal="true"/>
    <Button
        android:id="@+id/btn_btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_below="@id/tv_btn1"/>
    <TextView
        android:id="@+id/tv_btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn_btn1"
        android:text="@string/tv_btn2"
        android:textColor="#000000"
        android:layout_marginTop="10dp"
        android:layout_centerHorizontal="true"/>
    <Button
        android:id="@+id/btn_btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_btn2"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:text="@string/app_name"
        android:textAllCaps="false"/>
</RelativeLayout>

        onClick属性

        每当点击按钮时,就表示用户确认了某个事项,接下来轮到App来处理了。onClick属性便用来接管用户的点击动作,该属性的值是个方法名,也就是当前页面的Java代码存在这么一个方法:当用户点击时,就自动调用该方法。

         Button标签指定了onClick属性值为doClick,表示点击该按钮会触发Java代码中的doClick方法。

<Button
        android:id="@+id/btn_btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn_btn2"
        android:onClick="doClick"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:text="@string/btn_btn3"
        android:textAllCaps="false" />
    <TextView
        android:id="@+id/tv_btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tv_btn3"
        android:layout_below="@id/btn_btn3"
        android:layout_centerHorizontal="true"
        android:textColor="#000000"/>

        与之相对应,页面所在Java代码需要增加doClick方法。

package com.example.helloandroid;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;


public class ActivityButton extends AppCompatActivity {
    private TextView tv_btn3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        tv_btn3=findViewById(R.id.tv_btn3);
    }
    public void doClick(View view){
        String desc=String.format("%s 您点击了按钮:%s",DateUtil.getNowTime(),((Button) view).getText());
        tv_btn3.setText(desc);
    }
}

                ps.时间工具DateUtil

package com.example.helloandroid;

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtil {
    public static String getNowTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        return sdf.format(new Date());
    }
}

点击事件和长按事件

        在实际开发中,不推荐使用onClick属性,而是在代码中给按键对象注册监听器。

        所谓监听器,意思是专门监听控件的动作行为,它平时无事可做,只有控件发生了指定动作,监听器才会出发开关去执行对应的代码逻辑。点击监听器需要实现接口View.setOnClickLinstener,并重写onClick方法补充点击事件的处理代码,再由按钮调用setOnClickLinstener方法设置监听对象。

public class ActivityButton extends AppCompatActivity implements View.OnClickListener{
    private TextView tv_btn3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        findViewById(R.id.btn_btn4).setOnClickListener(this);
        findViewById(R.id.btn_btn5).setOnClickListener(this);
    }

    @Override
    public void onClick(View v){
        if (v.getId()==R.id.btn_btn4){
            String desc=String.format("%s 您点击了按钮:%s",DateUtil.getNowTime(),((Button) v).getText());
            tv_btn3.setText(desc);
        }
        if (v.getId()==R.id.btn_btn5){
            String desc=String.format("%s 您点击了按钮:%s",DateUtil.getNowTime(),((Button) v).getText());
            tv_btn3.setText(desc);
        }
    }
}

         除了点击事件外,Android还设计了另外一种长按事件,每当控件被按住超过500毫秒之后,就会触发该控件的长按事件。若要捕捉按钮的长按事件,可调用按钮对象的setOnLongClickListener方法设置长按监听器。

        把长按监听器设置到当前页面,该页面需要实现对应的长按接口View.OnLongClickListener,并重写长按方法onLongClick。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);
        tv_btn3=findViewById(R.id.tv_btn3);
        findViewById(R.id.btn_btn6).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (v.getId()==R.id.btn_btn6){
                    String desc=String.format("%s 您长按了按钮:%s",DateUtil.getNowTime(),((Button) v).getText());
                    tv_btn3.setText(desc);
                }
                return true;
            }
        });
    }
    

禁用与恢复按钮

        在某些情况,我们会希望暂时禁止点击操作,这样的业务场景中,按钮先后有两种状态,即不可以状态与可用状态,他们在外观功能上的区分如下:

        (1)不可用按钮:按钮不允许点击,即使点击也没反应,同时按钮文字为灰色。

        (2)可以按钮:按钮允许点击,点击按钮会触发点击事件,同时按钮文字为正常黑色。

        是否允许点击,需引入新属性android:enabled ,该属性值为true时表示启用,false时表示禁用。

<Button
        android:id="@+id/btn_btn6"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/btn_ll"
        android:enabled="false"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:text="测试按钮"/>

        在Java中可通过setEnabled方法设置按钮的可用状态(true表示启用,false表示禁用)。

@Override
    public void onClick(View v){
        if (v.getId()==R.id.btn_btn4){
            btn_test.setTextColor(Color.BLACK);
            btn_test.setEnabled(true);
            String desc=String.format("%s 您点击了按钮:%s",DateUtil.getNowTime(),((Button) v).getText());
            tv_btn3.setText(desc);
        }
        if (v.getId()==R.id.btn_btn5){
            btn_test.setTextColor(Color.GRAY);
            btn_test.setEnabled(false);
            String desc=String.format("%s 您点击了按钮:%s",DateUtil.getNowTime(),((Button) v).getText());
            tv_btn3.setText(desc);
        }
    }

猜你喜欢

转载自blog.csdn.net/demon_dog/article/details/128913604