安卓APP_ 控件(2)—— Button

摘自:安卓APP_ 控件(2)—— Button
作者:丶PURSUING
发布时间: 2021-03-29 14:20:54
网址:https://blog.csdn.net/weixin_44742824/article/details/115290501

开篇:安卓APP_ 控件(1)—— TestView

StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点 < selector >,我们只需要将Button的background属性设置为改drawable资源即可轻松实现,按下按钮时不同的按钮颜色或背景。

实现效果如图:默认状态下为黑色关闭飞行模式状态,按下时为青色飞行模式状态。

在这里插入图片描述
在一、二、三中,未操作.java文件,都是在操作.xml文件,所谓xml负责布局,java负责后台逻辑嘛。

一、Drawable资源的使用

首先按照下图修改,否则按钮的背景颜色不会变化(老版本没问题,在版本29后就不行,需要修改。)
在这里插入图片描述

(1)新建一个图片选择器

在这里插入图片描述命名
在这里插入图片描述

导入两张draw图片到drawable文件夹中,

在这里插入图片描述

(2)设置按键不同状态效果

在刚才创建的Drawable文件btn_selector_pic.xml中:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/ic_baseline_airplanemode_active_24" android:state_pressed="true"/><item android:drawable="@drawable/ic_baseline_airplanemode_inactive_24"/></selector>

代码解析:

在这里插入图片描述

(3)在main.xml中引用

然后在activity_main.xml中引用:android:background="@drawable/btn_selector_pic",如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!--    点击进入Button发现他是继承了TextView,所以TV有的Button也有  -->
<!--    关于高和宽,可以直接拖动效果图设置,更加直观  --><Buttonandroid:layout_width="309dp"android:layout_height="316dp"android:background="@drawable/btn_selector_pic"android:text="我是按钮"android:textSize="30sp" /></LinearLayout>

这时候已经完成了按下按键是一个图片,松开是另一个图片,下面我们继续添加颜色的改变。

二、color资源的使用

(1)新建一个颜色选择器

在这里插入图片描述选择创建Color选择器,我命名为btn_color.xml
在这里插入图片描述

(2)设置按键不同状态效果

代码形式跟图片选择器一毛一样:在btn_color.xml中,按下是一种颜色,放开就是另一种颜色。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:color="@color/teal_200" android:state_pressed="true" /><item android:color="@color/black"/></selector>

(3)在main.xml中引用

跟图片选择器引用方法一样,在activity_main.xml中引用:

android:backgroundTint="@color/btn_color"
  • 1

这样颜色就会随着按钮状态而变化。

三、用得不多的前景色:foreground

还有一个参数叫做前景色,当设置这个的时候,就会把backgroundTint的颜色和background的图片一并覆盖,所以叫前景色嘛,只能看到它。

在main.xml中的引用:

android:foreground="#ff00ff00"
  • 1

其中,参数 #ff00ff00 意思为:代表的颜色为绿色,从左到右分别对应RGB三原色,可在00~ff范围配色调节。

ff00ff00
设置透明度为ff,即不透明设置Red为00,红色占比为0设置Green为FF,绿色占比为100设置Blue为00,蓝色占比为0

四、Button事件处理

在 < Button />中新增按键id为btn_1

android:id="@+id/btn_1"
  • 1

Main.java中同时调用三个Button事件,观察他们的运行情况

package com.example.button;import androidx.appcompat.app.AppCompatActivity;import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;import javax.security.auth.login.LoginException;public class MainActivity extends AppCompatActivity {//使用回调方法前,要先定义这个静态常量 TAG(回调方法alt+enter)private static final String TAG = "zhua";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通过id创建 Button 对象:btn_1Button btn_1 = findViewById(R.id.btn_1);//点击事件btn_1.setOnClickListener(new View.OnClickListener() {@Override//回调方法:触发的时候会被回调(下面有补充)public void onClick(View v) { Log.e(MainActivity.TAG, "onClick: ");}});//长按事件btn_1.setOnLongClickListener(new View.OnLongClickListener() {@Override//回调方法:触发的时候会被回调(下面有补充)public boolean onLongClick(View v) {Log.e(TAG, "onLongClick: ");return false;}});//触摸事件btn_1.setOnTouchListener(new View.OnTouchListener() {@Override//回调方法:触发的时候会被回调(下面有补充)public boolean onTouch(View v, MotionEvent event) {Log.e(TAG, "onTouch: "+event.getAction());return false;}});}
}

log.e是打完loge后直接回车自动补全。

回调方法loge的使用:

光标放在错误位置,alt+enter选择在类MainActivity中创建一个常量TAG
在这里插入图片描述如图:
在这里插入图片描述

static成员能够限制外部的访问,因为static的成员是属于类的,是不属于任何对象实例,(因为静态成员是在类第一次加载的时候就创建的,所以在类的外部不需要对象而使用类名就可以访问的到静态的成员;

final修饰的常量定义一般都有书写规范,被final修饰的常量名称,所有字母都大写


其中,触摸事件分为三种,可以进入MotionEvent 中查看
在这里插入图片描述
程序运行,通过观察回调方法打印的信息,研究这三个事件的执行情况,

事件执行顺序

(1)点击后立即松开:

在这里插入图片描述
(2)长按
在这里插入图片描述

(3)长按且拖动
在这里插入图片描述

修改回调方法返回值

1.仅把触摸事件回调方法返回值改为true

我们称之为:事件被onTouch消费了,不再传输给

在这里插入图片描述
2.仅把长按事件回调方法返回值改为true

(1)点击一次后快速松开:
在这里插入图片描述
(2)长按后快速松开
在这里插入图片描述


长按后快速松开这里可以看到一个非常有意思的现象!!

①为什么点击事件消失了?

②再联想到在触摸事件中把返回值改为true,然后点击事件和长按事件都吸收了

③又想到一个现象,三个事件的执行顺序一定为:先有触摸事件,然后如果有长按就到长按,最后一定是松手的时候有点击事件。


这几个想到一起,我悟了悟了!!

上面提到的触摸事件为true的模型

在这里插入图片描述
长按事件为true,长按后松开的模型

在这里插入图片描述

对按键事件的处理也可放在xml中

对按键事件的处理也可以在xml中设置,下面以点击事件为例,在Main.xml中:

在这里插入图片描述Main.java中实现方法体:
在这里插入图片描述
可以看到,myClick发生了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓APP_ 控件(3)—— EditText

摘自&#xff1a;安卓APP_ 控件&#xff08;3&#xff09;—— EditText 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-29 18:43:40 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115305883 开篇&#xff1a;安卓APP_ 控件&#xff08…

python做游戏怎么实现窗口_python和py游戏窗口类

你在draw_sprite()中有事件循环&#xff0c;所以它一直运行到游戏结束&#xff0c;window.set_background永远不会执行。在您的代码构造不正确。在我试着更正它&#xff0c;稍后再发送代码。在编辑&#xff1a;如何组织代码的简单示例。在现在它在一个文件中。在Pygame中总是一…

如何使得账户密码永不过期

如何使得账户密码永不过期 原文:如何使得账户密码永不过期可以通过以下vbs脚本做的使得账户密码永不过期 dim users获取所有用户set users getobject("winmgmts:{impersonationlevelimpersonate}").instancesof("win32_useraccount")for each user in use…

怎么下载并安装python_怎么下载官网python并安装

怎么下载官网python并安装&#xff1f;百度搜索Python官网。看到上图显示官网的没&#xff0c;点击进入。把鼠标移到downloads上&#xff0c;然后看到下拉选项&#xff0c;点击Windows。然后看到如下界面。这么多的安装包&#xff0c;该选那个呢。下图画圈的是版本号&#xff0…

匿名函数python_基于python内置函数与匿名函数详解

内置函数 Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool() exec() isinstance() pow() super()…

ASP.NET AJAX(服务器回调)

如果只用纯粹的 js &#xff0c;你必须弥补 ASP.NET 服务器端抽象和有限的 HTML DOM 之间的鸿沟&#xff0c;这不简单&#xff0c;没有 VS 的智能提示和调试工具&#xff0c;编写无错的代码和诊断错误都非常困难。由于各种突发事件及实现的差异&#xff0c;编写能够在所有现代浏…

git版本回退命令_Git学习版本回退和管理文件的修改及删除操作

版本回退前面我们成功的提交了一次mygit.txt&#xff0c;下面咱对它进行修改&#xff0c;内容如下&#xff1a;Hello GitGit is so easy.然后用git status来跟踪该文件的状态&#xff1a;可以看到hellogit.txt已经被修改过了&#xff0c;到底这次修改的内容与上次的内容有什么不…

node 版本升级_Node-RED: 自动化事件触发工具的安装与介绍

Node-RED 介绍Node-RED 是一种基于流程的编程工具由 IBM 的新兴技术服务团队原创开发Node-RED 是一种事件触发工具&#xff0c;和 StackStorm 类似, 可以归类为上层的自动化工具&#xff0c;可以用来触发与之相对应的下层自动化工具&#xff0c;比如 ansible&#xff0c;来更加…

python处理mysql数据结构_python环境下使用mysql数据及数据结构和二叉树算法(图)...

python环境下使用mysql数据及数据结构和二叉树算法(图)&#xff1a;1 python环境下使用mysql2使用的是 pymysql库3 开始-->创建connection-->获取cursor-->操作-->关闭cursor->关闭connection->结束45 代码框架6 import pymysql.cursors7 ###连接数据库8 con…

大数据工作流_大数据和人工智能时代下的数字化工作流

点击上方“Bentley软件”可以订阅哦本文作者Bentley 软件公司高级技术经理赵顺耐大数据、人工智能以及与之相伴相生的物联网已经成为现代社会的运行方式&#xff0c;信息技术的急速发展&#xff0c;和数据量爆炸式增长&#xff0c;改变了整个社会传统的运行方式。人类与信息技术…

多租户系统技术实现mysql_SaaS “可配置”和“多租户”架构的几种技术实现方式...

1、数据存储方式的选择多租户(Multi-Tenant )&#xff0c;即多个租户共用一个实例&#xff0c;租户的数据既有隔离又有共享&#xff0c;说到底是要解决数据存储的问题。常用的数据存储方式有三种。方案一&#xff1a;独立数据库一个Tenant&#xff0c;一个Database“的数据存储…

全国计算机等级考试题库二级C操作题100套(第15套)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

iOS如何判断当前网络的运营商

2019独角兽企业重金招聘Python工程师标准>>> 在IOS上存在retain屏&#xff0c;经常需要在一些时刻用到高清图&#xff0c;有些时候也要到普通图。 在网络条件很爽的情况下&#xff0c;这当然不在话下。如果咱是iphone用户&#xff0c;又正好用的是移动卡。 如果还用…

Py函数直接传入root是啥意思_Python内部函数——用处何在?

这是一篇译文&#xff0c;原文地址&#xff1a;https://realpython.com/inner-functions-what-are-they-good-for/1. 封装内部函数可以免受函数之外的情况的影响&#xff0c;也就是说&#xff0c;对于全局命名空间而言&#xff0c;它们是隐藏的。下面是一个简单的例子&#xff…

Linux 和 Windows 平台不同的 UCS-2 编码

2019独角兽企业重金招聘Python工程师标准>>> 以下是有关两个平台 UCS-2 编码的潜规则&#xff1a; 1, UCS-2 不等于 UTF-16。 UTF-16 每个字节使用 ASCII 字符范围编码&#xff0c;而 UCS-2 对每个字节的编码可以超出 ASCII 字符范围。UCS-2 和 UTF-16 对每个字符至…

vld检测不输出_输出轴热处理形变超差,找找原因

这里有最实用的技术&#xff0c;点击↑↑关注作者&#xff1a;阚亚威单位&#xff1a;镇江液压股份有限公司来源&#xff1a;《金属加工(热加工)》杂志我公司摆线液压马达输出轴材料主要为20CrMnTi&#xff0c;热处理工艺为渗碳直接淬火低温回火&#xff0c;工艺如图1所示。近期…

java 独占锁_锁分类(独占锁、分拆锁、分离锁、分布式锁)

一、java内存模型提到同步、锁&#xff0c;就必须提到Java的内存模型&#xff0c;为了提高程序的执行效率&#xff0c;java也吸收了传统应用程序的多级缓存体系。在共享内存的多处理器体系架构中&#xff0c;每个处理器都拥有自己的缓存&#xff0c;并且定期地与主内存进行协调…

url模糊匹配优化_企业必备的网站SEO优化解决方案

一、网站优化与调整倡议一个好网站不只要满足阅读者&#xff0c;还要契合搜索引擎规则、满足搜索引擎快照抓取、赋予评级、提升关键词排序等。我们站在用户角度和搜索引擎规则根底上为您提供一套完好的SEO处理计划SEO处理计划SEO倡议大纲&#xff1a;1、目的客户剖析与定位&…

中文能用rsa加密吗_外文文献数据库能用中文词进行检索吗?

大家使用外文文献数据库进行检索的时候可能想过一个问题&#xff1a;我们可以使用中文关键词进行检索吗&#xff1f;上文献检索课的老师可能会这样回答&#xff1a;在一般情况下&#xff0c;是不可以的。那么实际情况是怎样的呢&#xff1f;我们找几个外文文献数据库来验证一下…

【maven3学习之三】maven构建一个简单的Hello World

2019独角兽企业重金招聘Python工程师标准>>> 在写之前我先需要配置一下setting.xml。 首先是localRepository&#xff0c;默认情况下是【你的用户目录】/.m2/repository作为本地库的目录&#xff0c;但是我希望将其放在D:\maven_localRepository的目录下面。 如果…