按钮控件Button由TextView派生而来,它们之间的区别有:

(1)Button拥有默认的按钮背景,而TextView默认无背景;

(2)Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐;

(3)Button会默认将英文字母转为大写,而TextView保持原始的英文大小写;

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

(1)textAllCaps属性,它指定了是否将英文字母转为大写,为true是表示自动转为大写,为false表示不做大写转换。

(2)onClick属性,它用来接管用户的点击动作,指定了点击按钮时要触发哪个方法;

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dp"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="下面的按钮英文默认大写"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="Hello World"android:textColor="@color/black"android:textSize="17sp" /><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="下面的按钮英文保持原状"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="Hello World"android:textAllCaps="false"android:textColor="@color/black"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_click_xml"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doClick"android:text="直接指定点击方法"android:textColor="#000000"android:textSize="17sp" /><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="这里查看按钮的点击结果"android:textColor="#000000"android:textSize="17sp" /></LinearLayout>

代码:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class NextActivity extends AppCompatActivity
{private TextView tv_result; // 声明一个文本视图实例@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_next);tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图}// activity_button_style.xml中给btn_click_xml指定了点击方法doClickpublic void doClick(View view){String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) view).getText());tv_result.setText(desc); // 设置文本视图的文本内容}}

DateUtil
package com.example.myapplication;import android.annotation.SuppressLint;import java.text.SimpleDateFormat;
import java.util.Date;@SuppressLint("SimpleDateFormat")
public class DateUtil
{// 获取当前的日期时间public static String getNowDateTime(){SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");return sdf.format(new Date());}// 获取当前的时间public static String getNowTime(){SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");return sdf.format(new Date());}}

===================================================================================================================

监听器,意思是专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。

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

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

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

监听器

第一个是匿名内部类,

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_click_single"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="指定单独的点击监听器"android:textColor="#000000"android:textSize="15sp" /><Buttonandroid:id="@+id/btn_click_public"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="指定公共的点击监听器"android:textColor="#000000"android:textSize="15sp" /></LinearLayout><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="5dp"android:text="这里查看按钮的点击结果"android:textColor="#000000"android:textSize="15sp" /></LinearLayout>

代码:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class NextActivity extends AppCompatActivity implements View.OnClickListener
{private TextView tv_result; // 声明一个文本视图实例@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_next);tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图// 从布局文件中获取名叫btn_click_single的按钮控件Button btn_click_single = findViewById(R.id.btn_click_single);// 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法btn_click_single.setOnClickListener(new MyOnClickListener());// 从布局文件中获取名叫btn_click_public的按钮控件Button btn_click_public = findViewById(R.id.btn_click_public);// 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法btn_click_public.setOnClickListener(this);}// 定义一个点击监听器,它实现了接口View.OnClickListenerclass MyOnClickListener implements View.OnClickListener{@Overridepublic void onClick(View v)         // 点击事件的处理方法{String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}}@Overridepublic void onClick(View v)   // 点击事件的处理方法{if (v.getId() == R.id.btn_click_public) // 来自于按钮btn_click_public{String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}}}

代码也可以如下:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class NextActivity extends AppCompatActivity implements View.OnClickListener
{private TextView tv_result; // 声明一个文本视图实例@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_next);tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图// 从布局文件中获取名叫btn_click_single的按钮控件Button btn_click_single = findViewById(R.id.btn_click_single);// 设置点击监听器,一旦用户点击按钮,就触发监听器的onClick方法btn_click_single.setOnClickListener(new MyOnClickListener() {@Overridepublic void onClick(View v)         // 点击事件的处理方法{String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}});findViewById(R.id.btn_click_public).setOnClickListener(this);}// 定义一个点击监听器,它实现了接口View.OnClickListenerclass MyOnClickListener implements View.OnClickListener{@Overridepublic void onClick(View v)         // 点击事件的处理方法{String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}}@Overridepublic void onClick(View v)   // 点击事件的处理方法{if (v.getId() == R.id.btn_click_public) // 来自于按钮btn_click_public{String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}}}

==================================================================================================

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_longclick_single"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="指定单独的长按监听器"android:textColor="#000000"android:textSize="15sp" /><Buttonandroid:id="@+id/btn_longclick_public"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="指定公共的长按监听器"android:textColor="#000000"android:textSize="15sp" /></LinearLayout><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="5dp"android:text="这里查看按钮的长按结果"android:textColor="#000000"android:textSize="15sp" /></LinearLayout>

代码:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class NextActivity extends AppCompatActivity implements View.OnLongClickListener
{private TextView tv_result; // 声明一个文本视图实例@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_next);tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图// 从布局文件中获取名叫btn_click_single的按钮控件Button btn_longclick_single = findViewById(R.id.btn_longclick_single);// 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法btn_longclick_single.setOnLongClickListener(new MyOnLongClickListener());// 从布局文件中获取名叫btn_click_public的按钮控件Button btn_longclick_public = findViewById(R.id.btn_longclick_public);// 设置长按监听器,一旦用户长按按钮,就触发监听器的onLongClick方法btn_longclick_public.setOnLongClickListener(this);}@Overridepublic boolean onLongClick(View v)   // 长按事件的处理方法{if (v.getId() == R.id.btn_longclick_public)  // 来自于按钮btn_longclick_public{String desc = String.format("%s 您长按了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}return true;}// 定义一个长按监听器,它实现了接口View.OnLongClickListenerclass MyOnLongClickListener implements View.OnLongClickListener{@Overridepublic boolean onLongClick(View v)   // 长按事件的处理方法{String desc = String.format("%s 您长按了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容return true;}}
}

==================================================================================================

布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btn_enable"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="启用测试按钮"android:textColor="#000000"android:textSize="17sp" /><Buttonandroid:id="@+id/btn_disable"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="禁用测试按钮"android:textColor="#000000"android:textSize="17sp" /></LinearLayout><Buttonandroid:id="@+id/btn_test"android:layout_width="match_parent"android:layout_height="wrap_content"android:enabled="false"android:text="测试按钮"android:textColor="#888888"android:textSize="17sp" /><TextViewandroid:id="@+id/tv_result"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingLeft="5dp"android:text="这里查看测试按钮的点击结果"android:textColor="#000000"android:textSize="17sp" /></LinearLayout>

代码:

package com.example.myapplication;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 NextActivity extends AppCompatActivity implements View.OnClickListener
{private TextView tv_result; // 声明一个文本视图实例private Button btn_test; // 声明一个按钮控件实例@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_next);tv_result = findViewById(R.id.tv_result); // 获取名叫tv_result的文本视图// 因为按钮控件的setOnClickListener方法来源于View基类,所以也可对findViewById得到的视图直接设置点击监听器findViewById(R.id.btn_enable).setOnClickListener(this);findViewById(R.id.btn_disable).setOnClickListener(this);btn_test = findViewById(R.id.btn_test); // 获取名叫btn_test的按钮控件btn_test.setOnClickListener(this); // 设置btn_test的点击监听器}@Overridepublic void onClick(View v){// 由于多个控件都把点击监听器设置到了当前页面,因此公共的onClick方法内部需要区分来自于哪个按钮if (v.getId() == R.id.btn_enable){btn_test.setTextColor(Color.BLACK); // 设置按钮的文字颜色btn_test.setEnabled(true); // 启用当前控件}else if (v.getId() == R.id.btn_disable){btn_test.setTextColor(Color.GRAY); // 设置按钮的文字颜色btn_test.setEnabled(false); // 禁用当前控件}else if (v.getId() == R.id.btn_test){String desc = String.format("%s 您点击了按钮:%s", DateUtil.getNowTime(), ((Button) v).getText());tv_result.setText(desc); // 设置文本视图的文本内容}}
}

基础复习——Button——按钮——触发事件——监听器(单独公共)——点击事件与长按事件——禁用恢复按钮...相关推荐

  1. Java基础之处理事件——实现低级事件监听器(Sketcher 2 implementing a low-level listener)...

    控制台程序. 定义事件监听器的类必须实现监听器接口.所有的事件监听器接口都扩展了java.util.EventListener接口.这个接口没有声明任何方法,仅仅用于表示监听器对象.使用EventLi ...

  2. 13、Java Swing事件监听:事件处理模型和事件监听器

    事件表示程序和用户之间的交互,例如在文本框中输入,在列表框或组合框中选择,选中复选框和单选框,单击按钮等.事件处理表示程序对事件的响应,对用户的交互或者说对事件的处理是事件处理程序完成的. 当事件发生 ...

  3. 基于Java的Minecraft游戏后端自定义插件 05事件监听器

    事件监听器 内容简介 事件监听器 内容简介 事件监听器 文档中org.bukkit.event都是事件包 https://www.youtube.com/watch?v=PWQNsqwD-AY. pu ...

  4. 方立勋_30天掌握JavaWeb_Servlet事件监听器

    监听器 监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 监听器典型案例:监听wind ...

  5. 移动端长按事件 vue

    首先去除页面默认长按事件 -webkit-touch-callout: none !important; -webkit-user-select: none; 在标签中的写法 <p@touchs ...

  6. TextView AutoLink, ClikSpan 与长按事件冲突的解决,Android面试真题解析火爆全网

    } } } 首先调用 Linkify.addLinks 方法解析 autolink 的相关属性 判断是否 mLinksClickable mLinksClickable && !tex ...

  7. 虚幻引擎图文笔记:长按事件(Key Hold event)的蓝图实现

    长按事件也是游戏中的常见需求,长按事件的蓝图实现和代码实现思路不太一样,虽然节点用的不多但逻辑有点绕,本文详细解读一下实现方法,并且用宏制作一个拿来即用的长按事件处理节点 长按事件(Key Hold ...

  8. ListView的长按事件和点击事件冲突的解决办法

    需求是这样的:listView中点击item 跳转到一个activity,长按item可以对这条item进行删除操作,在删除前会弹出dialog(确认删除对话框). 但是在开发过程中发现,当长按某个i ...

  9. js按钮触发网页提醒_js触发asp.net的Button的Onclick事件应用

    在asp.net引入事件驱动之后,在一个页面上很容易解决多个按钮触发不同事件的问题,避免了在asp中需要多个form或者通过js脚本来控制的麻烦. asp.net带来便利的同时,也带来一个问题.在实际 ...

最新文章

  1. 【怎样写代码】参数化类型 -- 泛型(七):泛型方法
  2. Zend Framework 自动加载类的实现方法
  3. go 并发安全map 分段锁实现
  4. ios 查看同文件名_实战恢复cisco 2950交换机的IOS
  5. linux运行tcl脚本语言,Tool Command Language (Tcl)初体验
  6. python秒表游戏_数学游戏Tkinter中的Python计时器
  7. 一种快速部署开发用oracle的办法
  8. Windows 上安装 Scala
  9. Javascript:学习笔记
  10. Session操作对象的三种状态
  11. 使用python将视频中的音频分离出来
  12. QtableView点击滑动设计
  13. 【区块链扩容】侧链技术 Plasma(Layer 2)
  14. 微信小程序获取头像和昵称,头像圆角设置
  15. 西瓜书-2.5偏差与方差
  16. ps4看直播 HTML,ps4直播教学 怎么样才能直播
  17. MongoDB的基础指令和练习笔记
  18. 时间频度和时间复杂度
  19. 哨兵2号(Sentinel-2)卫星数据批量处理
  20. ai自动配音_AI全自动剪辑视频软件4.3版,新增双语字幕条人工配音功能!

热门文章

  1. 医院系统的服务器,医院管理系统云服务器
  2. 福建85后组建的“第四方支付”被抓:涉案28亿 费率2.5%-4%
  3. 宝宝困了为什么不睡觉就是要一直哭呢?
  4. xv格式转换为FLV格式(讯雷格式转换)
  5. 第四范式戴文渊:让所有合作伙伴都成为AI公司
  6. 马云与四大行支付战争全篇解读
  7. 传播智课C#-学习笔记(2)
  8. PSINS初始对准方法
  9. 用SAX优化读excel文件的内存消耗
  10. JMeter提示Could not create the Java virtual machine