android中控件和基本事件的响应

news/2024/4/29 11:53:28/文章来源:https://blog.csdn.net/qq_56819189/article/details/137038459

1.概述

        在Android中,在处理UI中的各种元素的时候,两个程序中的要点为:

        得到布局文件(XML)中的控件句柄

        设置控件的行为

        本篇文章将介绍在 Android 中几种基本的程序控制方法,要获得的效果是通过 2 个按钮来控制一个文本框的背景颜色,其运行结果如图所示: 

2.目录

目录

1.概述

2.目录

3.事件响应方法

4.第二种响应方法

5.第三种响应方法

6.扩展


3.事件响应方法

        本例构建一个应用程序,其在 AndroidManifest.xml 描述文件中的内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/Theme.Noback"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

        本例定义了一个 Android 中基本的活动,布局文件(layout)的代码片段如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/screen"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextView android:id="@+id/text1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:textSize="24sp"android:text="@string/text1" /><Button android:id="@+id/button1"android:layout_width="80sp"android:layout_height="wrap_content"android:layout_gravity="center"android:text="@string/red"/><Button android:id="@+id/button2"android:layout_width="80sp"android:layout_height="wrap_content"android:layout_gravity="center"android:text="@string/green"/>
</LinearLayout>

         根据以上的布局文件中定义的两个按钮和一个文本框,这个布局文件被活动设置为 View 后,显示的内容就如上图所示,只是行为还没有实现。行为将在源代码文件 MainActivity.java 中实现,这部分的代码如下所示:

package xyz.dritrtj.myexer;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 MainActivity extends AppCompatActivity {private static final String TAG = "TestEvent1";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final TextView Text = findViewById(R.id.text1); // 获得句柄final Button Button1 = findViewById(R.id.button1);final Button Button2 = findViewById(R.id.button2);Button1.setOnClickListener(new View.OnClickListener() { // 实现行为功能public void onClick(View v) {Text.setBackgroundColor(Color.RED);}});Button2.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Text.setBackgroundColor(Color.GREEN);}});}
}

        在创建的过程中,通过 findViewById 获得各个屏幕上面的控件(控件)的背景,这里使用的 R.id.button1 等和布局文件中各个元素的 id 是对应的。实际上,在布局文件中,各个控件即使不写 android:id 这一项也可以正常显示,但是如果需要在代码中进行控制,则必须设置这一项。
        根 据 Button 控件的 setOnClickListener() 设置了其中的点击行为,这个方法的参数实际上是一个View.OnClickListener 类型的接口,这个接口需要被实现才能够使用,因此在本例的设置中,实现了其中的 onClick()函数。这样既可实现点击的时候实现相应的功能,在点击的函数中,将通过 Text 的句柄对其进行控制。

        在 Android 的控件使用方面,这两个编程方面要点是:

        使用 findViewById()获取布局文件(XML)中控件的句柄;
        使用 setOnXXXListener()设置事件处理函数。

        SetOnXXXListener()等函数是 android.view.View 类的函数,各种控件(包括 Button、EditText)都扩展这个类,同族的函数包括: 

void setOnClickListener(View.OnClickListener l); 
void setOnFocusChangeListener(View.OnFocusChangeListener l); 
void setOnKeyListener(View.OnKeyListener l);
void setOnLongClickListener(View.OnLongClickListener l); 
void setOnTouchListener(View.OnTouchListener l);

        这些函数用于事件处理,它们由程序实现,通过设置这些内容也就设置了控件的行为。这些函数的参数都是所对应的 android.view.View 类中的方法。
        Android 中 UI 基本控制内容:使用 findViewById()联系布局文件中控件和句柄,并通过 OnClickListener()等定制句柄的行为。

4.第二种响应方法

        除了上述的使用方法,在使用同样的布局文件和应用程序的情况下,实现同样的功能。本例中使用的是另外的一种方式实现,本例使用的源代码文件如下所示:

package xyz.dritrtj.myexer;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.graphics.Color;
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 {private static final String TAG = "TestEvent2";private TextView mText;private Button mButton1;private Button mButton2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mText = findViewById(R.id.text1);mButton1 = findViewById(R.id.button1);mButton1.setOnClickListener(this); // 设置监听的类mButton2 = findViewById(R.id.button2);mButton2.setOnClickListener(this); // 设置监听的类}@SuppressLint("NonConstantResourceId")@Overridepublic void onClick(View v) {Log.v(TAG, "onClick()");switch(v.getId()){ // 区分不同的控件case R.id.button1:mText.setBackgroundColor(Color.RED);break;case R.id.button2:mText.setBackgroundColor(Color.GREEN);break;default:Log.v(TAG, "other");break;}}
}

        这个例子的主要变化是让活动实现(implements)了 OnClickListener()这个进口,也就是需要实现其中的 onClick()方法。然后通过 setOnClickListener()将其设置到按钮中的 参数就是 this,表示了当前的活动。
        通过这种方式的设置,如果程序中有多个控件需要设置,那么所设置的也都是一个函数。为了保证对不同控件具有不同的处理,可以由 onClick()函数的参数进行判断,参数是一个 View 类型,通过 getId()获得它们的 ID,使用switch…case 分别进行处理。
        在本例中,通过将需要将文本框(TextView)句柄保存为类的成员(mText),这样就可以在类的各个函数中都能获得这个句柄进行处理。这和上一种方法是有区别的,因为上一个例子实现的接口和获得的 TextView 在同一个函数中,因此不需要保存 TextView 的句柄。

5.第三种响应方法

        本例介绍同样功能实现的第三种方法,区别也仅仅在于 JAVA 源代码中,实现的内容如下所示。

package xyz.dritrtj.myexer;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
import android.graphics.Color;
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{private static final String TAG = "TestEvent3";private TextView mText;private Button1_OnClickListener mListener1 = new Button1_OnClickListener();private Button2_OnClickListener mListener2 = new Button2_OnClickListener();class Button1_OnClickListener implements View.OnClickListener { // 接口的第一个实现public void onClick(View v) {mText.setBackgroundColor(Color.RED);}}class Button2_OnClickListener implements View.OnClickListener { // 接口的第二个实现public void onClick(View v) {mText.setBackgroundColor(Color.GREEN);}}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mText = findViewById(R.id.text1);final Button mButton1 = findViewById(R.id.button1);final Button mButton2 = findViewById(R.id.button2);mButton1.setOnClickListener(mListener1); // 设置监听者的类mButton2.setOnClickListener(mListener2); // 设置监听者的类}}

        本例通过定义实现活动类中的 2 个子类,来实现 View.OnClickListener 这个接口,这种方式是一种最为直接的方式,即为不同的控件单独实现它的相应类。

6.扩展

        更多详情可通过下方的链接,下载电子书-------《Android Studio开发实战:从零基础到App上线》进行参考研究。

http://code.drjtrtj.xyz/downCode?id=4021

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

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

相关文章

吴恩达机器学习:实践实验室-应用机器学习的建议(Advice for Applying )

在这个实验室中&#xff0c;您将探索评估和改进机器学习模型的技术。 文章目录 1 - Packages2-评估学习算法&#xff08;多项式回归&#xff09;2.1拆分数据集2.1.1图列、测试集 2.2模型评估的误差计算&#xff0c;线性回归2.3比较训练和测试数据的表现 3-偏差和方差3.1绘图列…

鸿蒙OpenHarmony技术:【设备互信认证】

简介 在OpenHarmony中&#xff0c;设备互信认证模块作为安全子系统的子模块&#xff0c;负责设备间可信关系的建立、维护、使用、撤销等全生命周期的管理&#xff0c;实现可信设备间的互信认证和安全会话密钥协商&#xff0c;是搭载OpenHarmony的设备进行可信互联的基础平台能…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

一篇文章,告别Flutter状态管理争论,问题和解决

起因 每隔一段时间&#xff0c;都会出现一个新的状态管理框架&#xff0c;最近在YouTube上也发现了有人在推signals, 一个起源于React的状态管理框架&#xff0c;人们总是乐此不疲的发明各种好用或者为了解决特定问题而产生的方案&#xff0c;比如Bloc, 工具会推陈出新&#x…

春秋云境CVE-2023-0562

简介 银行储物柜管理系统是一个基于网络的应用程序&#xff0c;用于处理存储银行客户贵重物品的银行储物柜。储物柜的所有详细信息都保存在数据库中。银行储物柜管理系统项目是使用 PHP 和 MySQLi 扩展开发的。 正文 进入靶场&#xff0c;首先就看到有个bankers&#xff0c;…

Java安全篇-Fastjson漏洞

前言知识&#xff1a; 一、json 概念&#xff1a; json全称是JavaScript object notation。即JavaScript对象标记法&#xff0c;使用键值对进行信息的存储。 格式&#xff1a; {"name":"wenda","age":21,} 作用&#xff1a; JSON 可以作为…

【Redis】redis哨兵模式

概述 Redis Sentinel&#xff0c;即Redis哨兵&#xff0c;在Redis 2.8版本开始引入。它是Redis高可用的实现方案之一。Sentinel是一个管理多个Redis实例的工具&#xff0c;它的核心功能是可以实现对Redis的监控、通知、自动故障转移。 监控&#xff08;Monitoring&#xff09…

OSX-02-Mac OS应用开发系列课程大纲和章节内容设计

本节笔者会详细介绍下本系统专题的大纲&#xff0c;以及每个专题章节的组织结构。这样读者会有一个全局的概念。 在开始前还是在再介绍一下下面这个框架图&#xff0c;因为比较重要&#xff0c;在这里再冗余介绍一下。开发Apple公司相关产品的软件时&#xff0c;主要有两个框架…

Untiy 布局控制器Aspect Ratio Fitter

Aspect Ratio Fitter是Unity中的一种布局控制器组件&#xff0c;用于根据指定的宽高比来调整包含它的UI元素的大小。实际开发中&#xff0c;它可以确保UI元素保持特定的宽高比&#xff0c;无论UI元素的内容或父容器的大小如何变化。 如图为Aspect Ratio Fitter组件的基本属性&…

深度学习 - PyTorch基本流程 (代码)

直接上代码 import torch import matplotlib.pyplot as plt from torch import nn# 创建data print("**** Create Data ****") weight 0.3 bias 0.9 X torch.arange(0,1,0.01).unsqueeze(dim 1) y weight * X bias print(f"Number of X samples: {len(…

Day24:私信列表、私信详情、发送私信

测试用户&#xff1a;用户名aaa 密码aaa 查询当前用户的会话列表&#xff1b;每个会话只显示一条最新的私信&#xff1b;支持分页显示。 首先看下表结构&#xff1a; conversation_id: 用from_id和to_id拼接&#xff0c;小的放前面去&#xff08;因为两个人的对话应该在一个会…

物联网实战--入门篇之(一)物联网概述

目录 一、前言 二、知识梳理 三、项目体验 四、项目分解 一、前言 近几年很多学校开设了物联网专业&#xff0c;但是确却地讲&#xff0c;物联网属于一个领域&#xff0c;包含了很多的专业或者说技能树&#xff0c;例如计算机、电子设计、传感器、单片机、网…

誉天华为认证云计算课程如何

HCIA-Cloud Computing 5.0 课程介绍&#xff1a;掌握华为企业级虚拟化、桌面云部署&#xff0c;具备企业一线部署实施及运维能力 掌握虚拟化技术、网络基础、存储基础等内容&#xff0c;拥有项目实施综合能力 满足企业虚拟化方案转型需求&#xff0c;应对企业日益多样的业务诉求…

快速上手Spring Cloud 十四:璀璨物联网之路

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

JAVA面试八股文之集合

JAVA集合相关 集合&#xff1f;说一说Java提供的常见集合&#xff1f;hashmap的key可以为null嘛&#xff1f;hashMap线程是否安全, 如果不安全, 如何解决&#xff1f;HashSet和TreeSet&#xff1f;ArrayList底层是如何实现的&#xff1f;ArrayList listnew ArrayList(10)中的li…

【计算机网络】第 11、12 问:流量控制和可靠传输机制有哪些?

目录 正文流量控制的基本方法停止-等待流量控制基本原理滑动窗口流量控制基本原理 可靠传输机制1. 停止-等待协议2. 后退 N 帧协议&#xff08;GBN&#xff09;3. 选择重传协议&#xff08;SR&#xff09; 正文 流量控制涉及对链路上的帧的发送速率的控制&#xff0c;以使接收…

云数据仓库Snowflake论文完整版解读

本文是对于Snowflake论文的一个完整版解读&#xff0c;对于从事大数据数据仓库开发&#xff0c;数据湖开发的读者来说&#xff0c;这是一篇必须要详细了解和阅读的内容&#xff0c;通过全文你会发现整个数据湖设计的起初原因以及从各个维度&#xff08;架构设计、存算分离、弹性…

FPGA高端项目:解码索尼IMX327 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 6、工程源码…

fastadmin学习04-一键crud

FastAdmin 默认内置一个 test 表&#xff0c;可根据表字段名、字段类型和字段注释通过一键 CRUD 自动生成。 create table fa_test (id int unsigned auto_increment comment ID primary key,user_id int(10) default 0 null…

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第三周&#xff1a;浅层神经网络(Shallow neural networks)3.1 神经网络概述&#xff08;Neural Network Overview&#xff09;3.2 神经网络的表示&#xff08;Neural Network Representation…