安卓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,一经查实,立即删除!

相关文章

python 列表自定义排序_自定义排序的Python列表

我有一个dicts列表: ldicts = [{name: 120-150}, {name: 90-120}, {name: 150-180}, {name: >= 180}, {name: <90}, {name: total}] 我想按值升序对其进行排序,以便输出如下: sortedldicts = [{name: total}, {name: <90}, {name: 90-120},{name: 120-150}, {name: …

HTML DOM知识点补充:

DOM Console 控制台对象提供了浏览器的debug的方法支持。 常用的&#xff1a;console.log()。 ⚠️coffeescript中&#xff0c;这个方法不加括号。 DOM Document 当一个HTML document加载到浏览器上&#xff0c;它就成为了一个document object。 它是root node 提供了大量docum…

python汇率编程_【菜鸟学Python】案例一:汇率换算

汇率换算V1.0 案例描述&#xff1a; 设计一个汇率换算器程序&#xff0c;其功能是将外币换算成人民币&#xff0c;或者相反 案例分析&#xff1a; 分析问题&#xff1a;分析问题的计算部分&#xff1b; 确定问题&#xff1a;将问题划分为输入、处理及输出部分&#xff1b; 设计…

2013年全球最佳工作

&#xfeff;&#xfeff;2013年即将到来&#xff0c;在新的一年中软件开发人士将继续保持良好的发展态势&#xff0c;通过信息技术及分析业务为企业带来竞争优势。系统分析师、网络/系统管理员、网络架构师以及数据库管理员也纷纷名列榜单前十五位。硅谷与华盛顿特区地铁体系则…

安卓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中总是一…

python十种日期格式_Python中最常用的日期时间格式

在日常开发的时候&#xff0c;我们经常会遇到时间处理的问题&#xff0c;代码示例爬虫过来的时间处理&#xff0c;代码示例对库内的数据进行时间维度的统计等。虽然是个很简单的东西&#xff0c;但每次用的时候都难免要再查一查&#xff0c;其实这就是基础不夯实的表现。趁着今…

精通QTP-自动化测试技术领航

精通QTP-自动化测试技术领航

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

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

python随机数比大小_1到范围内的随机数系统最大大小总是1模2^10

我试图通过使用频率测试、运行测试和卡平方检验来找到Python(2.7.10)中可用的prng的统计特性。在为了进行频率测试&#xff0c;我需要将生成的随机数转换为其二进制表示形式&#xff0c;然后计算1和{}的分布。我在python控制台上试验随机数的二进制表示&#xff0c;并观察到这种…

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

第11套&#xff1a; 给定程序中&#xff0c;函数fun的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后&#xff0c;从头至尾结点数据域依次为: 10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正…

实现 IE6 支持 position fixed 的 CSS 属性

众所周知 IE6 不支持 position:fixed &#xff0c;这个 bug 与 IE6 的双倍 margin 和不支持 png 透明等 bug 一样臭名昭著。 如何让 position:fixed 在 IE6 中工作的&#xff1f; 本文所使用的技巧是用了一条 Internet Explorer 的 CSS 表达式 (expression) 。你不可以直接使用…

测试百解

1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决&#xff1f; 首先&#xff0c;将问题提交到缺陷管理库里面进行备案。 然后&#xff0c;要获取判断的依据和标准&#xff1a; 根据需求说明书、产品说明、设计文…

python中re.split_Python: str.split()和re.split()的区别

str.split() 单一分隔符&#xff0c;使用str.split()即可 str.split不支持正则及多个切割符号&#xff0c;不感知空格的数量 re.split() 多个分隔符&#xff0c;复杂的分隔情况&#xff0c;使用re.split 原型&#xff1a; re.split(pattern, string, maxsplit0) 通过正则表达式…

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

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

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

第12套&#xff1a; 给定程序中&#xff0c;函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10&#xff0c;逆置后&#xff0c;从头至尾结点数据域依次为&#xff1a;10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划…

匿名函数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;编写能够在所有现代浏…

一行代码开启 Winform 中的 ListView 和 DataGridView 双缓冲功能

ListView 中的 DoubleBuffered 属性是 protected 的&#xff0c;外部不能直接修改&#xff0c;但实际使用中&#xff0c;我们一般都需要开启双缓冲来避免控件闪烁。 网上很多人都是通过自定义 ListView 来实现的&#xff0c;虽然也不复杂&#xff0c;但其实用反射是更简单的办法…

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

第13套&#xff1a; 给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为&#xff1a;10、4、2、8、6&#xff0c;排序 后链表结点数据域从头至尾的数据为&#xff1a;2、4、6、8、10。 请在程序的下划线处填…