Android开发 Button setOnClickListener

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

1. Button

Button是TextView的子类

区别:

setonclicklistener,APP开发,android,android studio,ide

 直接写两个内容相同、属性相同的TextView和Button对比如下:

 <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello, Alice"
        android:textSize="30dp"></TextView>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Hello, Alice"
        android:textSize="30dp"></Button>

效果:

setonclicklistener,APP开发,android,android studio,ide

 在Button中英文字母是否全部大写可以由属性textAllCaps控制。

新增属性onClick可以指定点击Button后跳转的方法,不过该属性已经过时,可以使用但不推荐

代码:

xml文件代码:

<?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"
    tools:context=".MainActivity7"
    android:orientation="vertical">



    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Time"
        android:textSize="30dp"
        android:textAllCaps="false"
        android:onClick="doClick"></Button>


    <TextView
        android:id="@+id/tv_r"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:textSize="30dp"></TextView>

</LinearLayout>

对应的activity.java文件代码:

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

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

public class MainActivity7 extends AppCompatActivity {

    private TextView tvr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main7);
        tvr = findViewById(R.id.tv_r);
    }

    public void doClick(View view){
        SimpleDateFormat sd = new SimpleDateFormat("HH:MM:SS");
        String t = sd.format(new Date());
        System.out.println(t);
        String s = String.format("You click %s button, the result is %s", ((Button)view).getText(), t);
        System.out.println(s);
        tvr.setText(s);
    }
}

效果图:

setonclicklistener,APP开发,android,android studio,ide

2.点击事件监听

前面说了如何使用onClick来调用点击按钮之后的函数。

但这会存在一个问题,xml文件是用于设置APP界面布局的,如果加入java代码中的函数名,会导致界面设计与程序逻辑混在一起,不利于复用。

所以最佳方法是点击事件监听的代码只写在java文件中。

主要调用的方法是监听器setOnClickListener,有多种写法,但本质都是实现View.OnClickListener接口。

步骤为:

  • View调用setOnClickListener
  • 实现View.OnClickListener接口的OnClick方法,这个方法也就是点击Button后执行什么操作
  • 如果存在多个Button调用同一个OnClick方法,需要通过View的id来分别执行不同的操作

写法一:

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity8 extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main8);

        Button bt = findViewById(R.id.bt1);
        tv = findViewById(R.id.tv2);
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.setText("Surprise!");
            }
        });
    }
}

写法二:

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity8 extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main8);

        Button bt = findViewById(R.id.bt1);
        tv = findViewById(R.id.tv2);
        bt.setOnClickListener(new MyClick(bt) );
    }

    public class MyClick implements View.OnClickListener{
        private View view;

        MyClick(View view){
            this.view = view;
        }

        public void onClick(View view){
            tv.setText("Surprise!");
        }
    }

}

写法三:

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity8 extends AppCompatActivity implements View.OnClickListener{

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main8);

        Button bt = findViewById(R.id.bt1);
        tv = findViewById(R.id.tv2);
        bt.setOnClickListener(this );
    }



    public void onClick(View view){
            tv.setText("Surprise!");
        }


}

多个Button调用同一个OnClick方法时:

public void onClick(View view){
            switch(view.getId()){
                case R.id.bt1: tv.setText("Surprise!");
                                break;
                case R.id.tv2: tv.setText("Bad News!");
                                break;
                case ....
            }


        }

这里涉及到回调的概念,View.OnClickListener接口内实现的OnClick函数,是在View类的某个地方被调用的。

用到回调的目的是保证一次点击只调用一次OnClick函数。

最后,因为是在View类的某个地方调用OnClick函数,所以所有的View类及其派生类,都可以使用点击监听,比如TextView。

3.长按按钮

点击按钮500ms内认为是一次点击,若大于500ms,则被识别为一次长按。

使用长按监听器setOnLongClickListener监听,用法与setOnClickListener类似。

区别在于重写的函数onLongClick返回类型为boolean,若为true,则表示该控件自己处理长按事件,否则交给父控件处理。

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity8 extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main8);

        Button bt = findViewById(R.id.bt1);
        tv = findViewById(R.id.tv2);
        bt.setOnLongClickListener(new View.OnLongClickListener(){
            @Override
            public boolean onLongClick(View view){
                tv.setText("Long Suprise");
                return true;
            }
        } );

    }






}

因为View.OnLongClickListener()接口只有一个方法,所以也可以直接用lamda表达式来实现

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity8 extends AppCompatActivity {

    private TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main8);

        Button bt = findViewById(R.id.bt1);
        tv = findViewById(R.id.tv2);
        bt.setOnLongClickListener(view -> {
            tv.setText("Long Suprise");
            return true;
        });

    }






}

View类还有许多监听器,实现方法都是类似的。

setonclicklistener,APP开发,android,android studio,ide

 文章来源地址https://www.toymoban.com/news/detail-763348.html

4.禁用与恢复按钮

应用场景:

setonclicklistener,APP开发,android,android studio,ide

 属性enabled控制

下面是一个简单的动态控制按钮是否可用的例子:

xml:

<?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"
    tools:context=".MainActivity9"
    android:orientation="vertical">

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

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="disable"
            android:textSize="30dp"
            android:id="@+id/bt2"
            android:background="@color/pink"
            ></Button>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="enable"
            android:textSize="30dp"
            android:id="@+id/bt3"
            android:background="@color/red_66"
            ></Button>



    </LinearLayout>


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

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Click me"
            android:textSize="30dp"
            android:enabled="false"
            android:id="@+id/bt4"
            android:background="@color/purple_200"
            ></Button>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            android:textColor="@color/purple_200"
            android:id="@+id/tv3"></TextView>
    </LinearLayout>

</LinearLayout>

java:

package com.example.study;

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity9 extends AppCompatActivity implements View.OnClickListener {

    private TextView tv3;
    private Button bt4;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main9);


        Button bt2 = findViewById(R.id.bt2);
        Button bt3 = findViewById(R.id.bt3);
        bt4 = findViewById(R.id.bt4);


        tv3 = findViewById(R.id.tv3);

        bt2.setOnClickListener(this);
        bt3.setOnClickListener(this);
        bt4.setOnClickListener(this);




    }

    @Override
    public void onClick(View view) {
        switch(view.getId()){
            case R.id.bt2:      bt4.setEnabled(false);
                                bt4.setBackgroundColor(Color.GRAY);
                                break;
            case R.id.bt3:      bt4.setEnabled(true);
                                bt4.setBackgroundColor(Color.BLUE);
                                break;
            case R.id.bt4:      tv3.setText("Click successfully!");



        }
    }
}

效果图:

setonclicklistener,APP开发,android,android studio,ide

 

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

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

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

相关文章

  • 基于Android的学生信息管理App设计(Android studio开发)

    目 录 一、 题目选择(题目、选题意义) 3 二、 设计目的 3 1、 初衷 3 2、 结合实际 3 3、 使用工具 3 三、 最终页面效果展示 4 1、 登陆界面 4 2、 主界面 5 3、 各个功能模块 6 四、 各部分设计 11 1、活动页面Activity布局文件 11 2、Activity的编程 13 五、 总结 17 题目:基于Android的

    2024年02月08日
    浏览(100)
  • android studio开发app实例

    以下是一个简单的Android Studio开发App的实例: 1. 打开Android Studio,并创建一个新项目。 2. 选择一个适当的应用程序名称和包名称,然后选择目标API级别和默认Activity的模板。 3. 在MainActivity.java文件中,添加以下代码以配置MainActivity: ``` import android.os.Bundle; import androidx.appcompa

    2024年02月16日
    浏览(55)
  • Android APP开机启动,安卓APP开发自启动,安卓启动后APP自动启动 Android让程序开机自动运行APP

    第一步设置获取广播后的业务 第二查权限给APP 理论以上两步做完就可以了。APP也能收到广播信息了, 但是APP没有在桌面启动。 经过再研究,发现要在手机再设置自动开启等业务,以下是小米、魅族的系统设置的一些内容,其它平台自己研究。 这里已经显示收到广播信息  

    2024年02月06日
    浏览(57)
  • Android App开发基础(3)——App的设计规范

    本节介绍了App工程的源码设计规范,首先App将看得见的界面设计与看不见的代码逻辑区分开,然后利用XML标记描绘应用界面,同时使用Java代码书写程序逻辑,从而形成App前后端分离的设计规约,有利于提高App集成的灵活性。 手机的功能越来越强大,某种意义上相当于微型电

    2024年02月19日
    浏览(45)
  • Android毕业设计-------基于 Android 剧院购票APP的开发与设计

    摘要:近年来,随着社会的发展和科技方面的创新,越来越多的人选择使用手机应用程序来购买剧场票。本文将探讨基于 Android 平台的剧院购票应用程序的开发和设计。该应用程序将为用户提供浏览剧场列表、查看剧场详情、选择座位并购买剧场票的功能。在开发方面,我们

    2024年01月24日
    浏览(47)
  • 02 java ---- Android 基础app开发

    目录 相对布局 显示一个美女  显示两个美女 安卓APP启动过程 安卓布局控件 常用布局之相对布局 常用布局之相对布局 padding和margin 按键美化  常用布局之线性布局 安卓按键响应的几种方式 直接设置按键的onClick绑定的函数 自定义类实现按键监听事件的接口 匿名内部类实现

    2024年02月04日
    浏览(72)
  • Android 1.2.1 使用Eclipse + ADT + SDK开发Android APP

      这里我们有两条路可以选,直接使用封装好的用于开发Android的ADT Bundle,或者自己进行配置 因为谷歌已经放弃了ADT的更新,官网上也取消的下载链接,这里提供谷歌放弃更新前最新版本的 ADT Bundle供大家下载! 32位版: adt-bundle-windows-x86-20140702.zip(百度网盘) 64位版: adt

    2024年02月09日
    浏览(35)
  • 基于android studio开发的火车票购票系统app,android移动开发课设,毕业设计

    基于android studio开发实现火车票购票系统app 适用于android移动开发学习项目,课程设计,毕业设计等 开发工具:android studio 或者intellij idea专业版 操作系统:windows10 java: JDK11 构建工具Gradle : gradle-7.0.0 模拟器AVD:pixel 3XL API 30 具体AVD配置详情如下 APP功能 该APP包含17个Activity,每

    2024年02月09日
    浏览(55)
  • Android 系统桌面 App —— Launcher 开发(1)

    Launcher就是Android系统的桌面,俗称“HomeScreen”也就是我们开机后看到的第一个App。launcher其实就是一个app,它的作用是显示和管理手机上其他App。目前市场上有很多第三方的launcher应用,比如“小米桌面”、“91桌面”等等 要让app作为Launcher,需要在Manifest中添加两个category:

    2024年02月11日
    浏览(62)
  • Android开发的《大众设计App》项目介绍

    该《大众设计App》的功能介绍如下: 1、登录注册功能 登录、注册页面效果如下所示: 2、用户信息修改功能 (各个修改功能均已实现,因修改栏目较多不再逐一展示) 3、设计衣服的功能 (也是本App的核心功能) 页面效果如下图。分为上下两个区,上面部分是预览设计效果

    2024年02月02日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包