Android应用开发(7)按键(Button)

这篇具有很好参考价值的文章主要介绍了Android应用开发(7)按键(Button)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android应用开发学习笔记——目录索引

本章介绍按钮(Button)控件的常见用法,结合前面Android应用开发(5)文本显示(TextView)介绍按钮(Button)监听点击和长按事件,禁用和启用等。

参考google官网:https://developer.android.com/reference/android/widget/Button

一、按键(Button)介绍

按钮控件Button由TextView派生而来,所以TextView拥有的属性和方法,Button均能使用,如上一章Android应用开发(5)文本显示(TextView)设置文本内容、文本大小、显示颜色,按钮(Button)控件均可使用。它们之间的区别有:

  1. Button拥有默认的按钮背景,而TextView默认无背景;
  2. Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐;
  3. Button会默认将英文字母转为大写,而TextView保持原始的英文大小写;

与TextView相比,Button增加了两个新属性:

  1. textAllCaps属性,它指定了是否将英文字母转为大写,为true是表示自动转为大写,为false表示不做大写转换。
  2. onClick属性,它用来接管用户的点击动作,指定了点击按钮时要触发哪个方法;

由于按钮(Button)控件textAllCaps属性默认是true,表示全部转为大写。

如下图(1):

①没有设置textAllCaps属性,android:text全部转为大写了。

②设置了android:textAllCaps="false",按键显示文本和android:text一致,不会全部转为大写。

android button控件,Android应用开发学习笔记,android,android studio

图(1)

在代码中可以通过setAllCaps方法设置。


Button button = (Button) findViewById(R.id.button);
button.setAllCaps(false);

二、Button点击和长按事件监听

Button控件有两种常用的监听器:

(1)点击监听器,通过setOnClickListener方法设置。按钮被按住少于500毫秒时,会触发点击事件。

(2)长按监听器,通过setOnLongClickListener方法设置。按钮被按住超过500毫秒时,会触发长按事件。

  1. 设置点击事件监听

如果一个页面只有一个按键,可以通过下面方法为这一个按键定义监听器,并设置邦定监监听器


mTextView = (TextView) findViewById(R.id.textView);

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String string = String.format("%s: 你点击了按键:%s",
                Utils.getNowTimeMs(), ((Button) v).getText());
        mTextView.setText(string);
    }
});

或者


mTextView = (TextView) findViewById(R.id.textView);

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new MyOnClickListener());

class MyOnClickListener implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        String string = String.format("%s: 你点击了按键:%s",
                Utils.getNowTimeMs(), ((Button) v).getText());
        mTextView.setText(string);
    }
}

但是如果一个activity中有许多按键,给每一个按键都定义自己的监听器,非常的费时费力。

更好的方法的注册统一的监听,在当前activity实现View.OnClickListener接口


public class MainActivity extends AppCompatActivity 
        implements View.OnClickListener {
    private TextView mTextView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
        
        mTextView = (TextView) findViewById(R.id.textView);
    }
    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button) {
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextView.setText(string);
        }
    }
}
  1. 设置长按事件监听

按键按住超过500ms,触发长按事件,和设置点击事件类似,可通过setOnLongClickListener方法设置长按监听,具体代码如下:


public class MainActivity extends AppCompatActivity 
        implements View.OnLongClickListener {
    private TextView mTextView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button buttonLongClick = (Button) findViewById(R.id.longClickButton);
        buttonLongClick.setOnLongClickListener(this);
        
        mTextView = (TextView) findViewById(R.id.textView);
    }
    
    @Override
    public boolean onLongClick(View v) {
        if (v.getId() == R.id.longClickButton) {
            String string = String.format("%s: 你长按了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextView.setText(string);
            return true;
        }
        return false;
    }
}

三、Button的禁用与恢复

在实际业务中,按钮通常拥有两种状态,即不可用状态与可用状态,它们在外观和功能上的区别如下:

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

(2)可用按钮:按钮允许点击,点击按钮会触发点击事件;

可以通过xml的android:enabled属性和Java Button控件的setEnabled方法控制。

  1. xml:android:enabled属性值为true时表示允许点击,为false时表示不允许点击。

<Button
    android:id="@+id/button_test"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:enabled="false"
    android:text="测试按键" />
  1. Java:Button控件的setEnabled()方法控制


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button mButtonEnable, mButtonDisable, mButtonTest;
    private TextView mTextViewForTest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 启用、禁用测试
        mButtonEnable = (Button) findViewById(R.id.button_enable);
        mButtonDisable = (Button) findViewById(R.id.button_disable);
        mButtonTest = (Button) findViewById(R.id.button_test);
        mButtonEnable.setOnClickListener(this);
        mButtonDisable.setOnClickListener(this);
        mButtonTest.setOnClickListener(this);
        mTextViewForTest = (TextView) findViewById(R.id.textViewForTest);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button_enable) {
            String string = String.format("%s: 你点击了按键:%s, 请观察【测试按键】的状态",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
            mButtonTest.setEnabled(true);
        } else if (v.getId() == R.id.button_disable) {
            String string = String.format("%s: 你点击了按键:%s, 请观察【测试按键】的状态",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
            mButtonTest.setEnabled(false);
        } else if (v.getId() == R.id.button_test) {
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
        }
    }
}

四、Button控件测试程序

java:

MainActivity.java


package com.example.buttontest;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener {
    private final static String TAG = "lzl-test-Button";

    private TextView mTextView;
    private Button mButton1, mButton2, mButton3;
    private int mButton3onClickCount = 0;

    private Button mLongClickButton1, mLongClickButton2, mLongClickButton3;
    private TextView mTextViewForLongClick;

    private Button mButtonEnable, mButtonDisable, mButtonTest;
    private TextView mTextViewForTest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate: " + Utils.getNowDateTime());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = (TextView) findViewById(R.id.textView);

        mButton1 = (Button) findViewById(R.id.button1);
        mButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String string = String.format("%s: 你点击了按键:%s",
                        Utils.getNowTimeMs(), ((Button) v).getText());
                mTextView.setText(string);
            }
        });

        mButton2 = (Button) findViewById(R.id.button2);
        mButton2.setOnClickListener(new MyOnClickListener());

        mButton3 = (Button) findViewById(R.id.button3);
        mButton3.setOnClickListener(this);
        mButton3.setAllCaps(false);

        // 长按
        mLongClickButton1 = (Button) findViewById(R.id.longClickButton1);
        mLongClickButton2 = (Button) findViewById(R.id.longClickButton2);
        mLongClickButton3 = (Button) findViewById(R.id.longClickButton3);
        mLongClickButton1.setOnLongClickListener(this);
        mLongClickButton2.setOnLongClickListener(this);
        mLongClickButton3.setOnLongClickListener(this);
        mTextViewForLongClick = (TextView) findViewById(R.id.textViewForLongClick);

        // 启用、禁用测试
        mButtonEnable = (Button) findViewById(R.id.button_enable);
        mButtonDisable = (Button) findViewById(R.id.button_disable);
        mButtonTest = (Button) findViewById(R.id.button_test);
        mButtonEnable.setOnClickListener(this);
        mButtonDisable.setOnClickListener(this);
        mButtonTest.setOnClickListener(this);
        mTextViewForTest = (TextView) findViewById(R.id.textViewForTest);
    }

    @Override
    public boolean onLongClick(View v) {
        if (v.getId() == R.id.longClickButton1 || v.getId() == R.id.longClickButton2 || v.getId() == R.id.longClickButton3) {
            String string = String.format("%s: 你长按了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForLongClick.setText(string);
            return true;
        }
        return false;
    }

    class MyOnClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextView.setText(string);
        }
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button3) {
            boolean isAllCaps = (boolean) ((++mButton3onClickCount) % 2 == 1);
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextView.setText(string);
            mButton3.setAllCaps(isAllCaps);
        } else if (v.getId() == R.id.button_enable) {
            String string = String.format("%s: 你点击了按键:%s, 请观察【测试按键】的状态",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
            mButtonTest.setEnabled(true);
        } else if (v.getId() == R.id.button_disable) {
            String string = String.format("%s: 你点击了按键:%s, 请观察【测试按键】的状态",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
            mButtonTest.setEnabled(false);
        } else if (v.getId() == R.id.button_test) {
            String string = String.format("%s: 你点击了按键:%s",
                    Utils.getNowTimeMs(), ((Button) v).getText());
            mTextViewForTest.setText(string);
        }
    }
}

Utils.java


package com.example.buttontest;

import android.content.Context;

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

public class Utils {
    // 根据手机的分辨率从 dp 的单位 转成为 px(像素)
    public static int dp2px(Context context, float dp) {
        // 获取当前手机的像素密度(1个dp对应几个px)
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dp * scale + 0.5f); // 四舍五入取整
    }

    // 根据手机的分辨率从 px(像素) 的单位 转成为 dp
    public static int px2dp(Context context, float px) {
        // 获取当前手机的像素密度(1个dp对应几个px)
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (px / scale + 0.5f); // 四舍五入取整
    }

    // 获取当前的日期时间
    public static String getNowDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return simpleDateFormat.format(new Date());
    }

    // 获取当前的时间
    public static String getNowTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
        return simpleDateFormat.format(new Date());
    }

    // 获取当前的时间(毫秒ms)
    public static String getNowTimeMs() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss:SSS");
        return simpleDateFormat.format(new Date());
    }
}

xml:

activity_main.xml layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:text="Button1" />

            <Button
                android:id="@+id/button2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="Button2" />

            <Button
                android:id="@+id/button3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:text="Button3" />
        </LinearLayout>

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="显示按键结果" />

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/longClickButton1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="长按Button1" />

            <Button
                android:id="@+id/longClickButton2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="长按Button2" />

            <Button
                android:id="@+id/longClickButton3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="长按Button3" />
        </LinearLayout>

        <TextView
            android:id="@+id/textViewForLongClick"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="显示长按键结果" />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/button_enable"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:text="启用【测试按键】" />

            <Button
                android:id="@+id/button_disable"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:layout_weight="1"
                android:text="禁用【测试按键】" />
        </LinearLayout>

        <Button
            android:id="@+id/button_test"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:enabled="false"
            android:text="测试按键" />

        <TextView
            android:id="@+id/textViewForTest"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="显示按键结果" />
    </LinearLayout>
</LinearLayout>

模拟器运行

android button控件,Android应用开发学习笔记,android,android studio

图(2)

源码及测试apk

百度网盘链接:百度网盘 请输入提取码 提取码:test

github下载地址:

GitHub - liuzhengliang1102/AndroidStudio-LearnAppDevelopment

点此查看Android应用开发学习笔记的完整目录文章来源地址https://www.toymoban.com/news/detail-744297.html

到了这里,关于Android应用开发(7)按键(Button)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 15. 【Android教程】按钮 Button/ImageButton

    15. 【Android教程】按钮 Button/ImageButton

    在前面两章我们讲了 TextView,它是一个纯输出的控件;而 EditText 在 TextView 基础之上加入了简单的输入功能;今天要讲的 Button 是一个和用户互动感很强的控件,从今往后不再是单纯的文本展示,我们可以通过 TextView、EditText 再加上 Button 做出非常多有很意思的功能。ImageButt

    2024年04月14日
    浏览(9)
  • [Android studio] 第6节 Button控件

    目录 一、Button是什么? 二、使用步骤 1.demo Button控件具有许多属性可以用来自定义其外观和行为。以下是Button控件常用的参数属性及其详解: android:id :设置Button的唯一标识符。在代码中可以使用这个ID引用Button。 android:layout_width :指定Button的宽度,可以使用以下值: \\\"wra

    2024年02月08日
    浏览(9)
  • Android studio实现Button界面跳转

    Android studio实现Button界面跳转

    本教程以界面 MainActivity 跳转到 TwoActivity 为例 MainActivity对应layout:R.layout.activity_main TwoActivity*对应layout:R.layout.twolayout 1. 建立MainActivity的java文件 2. 建立MainActivity的layout xml文件:activity_main 。。。根据自身需求自身建立。。。。 3. 建立TwoActivity的layout xml文件:twolayout 。。。

    2024年02月14日
    浏览(10)
  • Android Studio 学习记录-按钮控件(Button)

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

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

    2023年04月22日
    浏览(10)
  • Android的Button按钮更换其他的背景颜色

    Android的Button按钮更换其他的背景颜色

    1.首先我们得明白Android里面的按钮的背景颜色是统一的,如果想更换整体的背景颜色的话可以 找到res-values-themes-themes.xml,双击打开themes.xml文件。 2 进行修改 如下图  3 效果图    

    2024年02月12日
    浏览(12)
  • 【快速解决】Android Button页面跳转功能

    【快速解决】Android Button页面跳转功能

    目录 让我们直接开始 第一步:先建立一个新的activity ​编辑  第二步:打开第一个页面的Java文件MainActivity 方法一:直接跳转功能如下:  方法二:输入密码才能进行跳转功能如下: 需要注意的地方 结语 第一步:先建立一个新的activity 他会自动生成两个文件一个是MainActi

    2024年02月04日
    浏览(7)
  • Android 之 Button (按钮)与 ImageButton (图像按钮)

    Android 之 Button (按钮)与 ImageButton (图像按钮)

    今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解,另外Button是TextView的子类,所以TextView上很多属性也可以应用到Button 上!我们

    2024年02月07日
    浏览(9)
  • Android 中利用多个Button组合实现选项切换效果

    Android 中利用多个Button组合实现选项切换效果

    效果图:       xml布局: gray_button.xml rect_white_button.xml  rect_gray_bg.xml  ​自己再实现3个按钮的点击事件即可  

    2024年02月15日
    浏览(12)
  • 【日常记录】Android Button控件 移除默认阴影背景

           现在做Android开发的伙伴们,平时应该非常容易遇到这样的情况:你在写测试demo时,极大概率会用到一个Button控件,你随手而为之的一个控件竟然自带阴影!  但是我们没写背景啊?  结论显而易见,原生控件给加了个默认阴影背景(不是它的活它非要干)。 玩An

    2023年04月08日
    浏览(8)
  • android button 按钮,设置左/右小图标,与文字居中距离

    android button 按钮,设置左/右小图标,与文字居中距离

    参考博客地址 功能点 支持自定义图标与文字的距离 支持小图标宽高自定义 支持左右自定义小图标

    2024年02月08日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包