安卓开发--新建工程,新建虚拟手机,按键事件响应(含:Android中使用switch-case遇到case R.id.xxx报错)

安卓开发--新建工程,新建虚拟手机,按键事件响应

  • 1.前言
  • 2.运行一个工程
    • 2.1布局一个Button
    • 2.2 button一般点击事件
    • 2.2 button属性点击事件
    • 2.2 button推荐点击事件(含:Android中使用switch-case遇到case R.id.xxx报错)

本篇博客介绍安卓开发的入门工程,通过使用按钮Buton来了解一个工程的运作机制。前面已经介绍了环境搭建,这里就默认大家环境都已经搭建好了。环境搭建看这里安卓开发–环境配置

1.前言

这里必须说明,我们平时开发APP的时候,实际上都是再虚拟设备上先进行调试,然后在下载到手机上进行安装的。当然,你也可以一直手机直接下载调试。我试过,下载卸载千百遍,有点废C口。
所以这里介绍如何新建虚拟设备。其实在APP开发中,是需要对所有不同屏幕大小的手机进行布局开发的,所以一开始就要选择一个目标屏幕大小,我属于个人开发者,就新建一个自己手机屏幕大小进行开发。新建一个设备如图:

上图,点击Add Device Definition之后,在如下界面选择这些配置,该配置和我手机保持一致。
代码配置手机信息

点击 Finish之后,会出现自定义的手机型号,点击next

选择手机镜像为 安卓13 然后会提示接受,然后下载
选择安卓13下载安卓13 (1.4G)

下载完成后,点击next,点击Finish。
可以看到顶部启动栏有一个新建的设备,我们可以直接启动看看效果,体验一个虚拟手机。
后续的开发都会在这个虚拟手机中完成。

2.运行一个工程

新建一个空白工程,参考这里:安卓开发–环境配置
新建好一个工程以后,需要修改布局代码res/layout/activity_main.xml将其替换为以下全部内容:

<?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"></LinearLayout>

上面是一个空白布局,后续开发的布局都从这里开始。

修改运行代码java/com/example/myfirstapp/MainActivity.java,将其全部替换为以下内容:

package com.example.myfirstapp;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {}

上面是一个空白逻辑,后续开发的代码流程都从这里开始。

记住了,一个空白工程就是本小节的流程,所有的开发都从一个空白工程开始。

2.1布局一个Button

先在res/layout/activity_main.xml文件中布局一个 Button,注意其id号为 btn1

<?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"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="按键1"android:textSize="50dp"/></LinearLayout>

此时的预览布局出现布局效果,如图中1、2分别为其代码以及对应的布局 :

好了,现在布局完成,我们探索如何使用按键。

2.2 button一般点击事件

在文件java/com/example/myfirstapp/MainActivity.java,写入以下代码,完成按键函数的一般调用:

package com.example.myfirstapp;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {private Button mBt1;//申明组件@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBt1=findViewById(R.id.btn1); // 读ID,与布局id号对应//监听函数mBt1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//你要处理的内容Log.d("btn1", "点击按钮了");}});}
}

我们将其下载到虚拟手机中,打开Logcat输出端口,可以看到点击被响应。效果如图:

这里1表示代码,2是虚拟手机界面,3是Logcat窗口,4是点击后的log信息。

2.2 button属性点击事件

按钮是自带被点击的属性的,可以利用其属性完成点击事件的检测。
布局文件res/layout/activity_main.xml代码,为其增加了android:onClick="showToast"

<?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"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="按键1"android:textSize="50dp"android:onClick="showToast"/></LinearLayout>

逻辑文件java/com/example/myfirstapp/MainActivity.java代码:

package com.example.myfirstapp;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity  extends AppCompatActivity {private Button mbt01;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mbt01=findViewById(R.id.btn1);}public  void showToast(View view){Log.d("btn1", "点击按钮了");}
}

效果如图:

这里1表示代码,2是虚拟手机界面,3是Logcat窗口,4是点击后的log信息。

2.2 button推荐点击事件(含:Android中使用switch-case遇到case R.id.xxx报错)

这个方法特别推荐在项目中使用,项目里面使用这中方式最合理,因为这个方法可以同时检测多个按键而不会逻辑冲突。
布局文件res/layout/activity_main.xml代码,为其新加了一个按键:

<?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"><Buttonandroid:id="@+id/btn1"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="按键1"android:textSize="50dp"/><Buttonandroid:id="@+id/btn2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="按键2"android:textSize="50dp"/></LinearLayout>

逻辑文件java/com/example/myfirstapp/MainActivity.java代码:

package com.example.myfirstapp;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity  extends AppCompatActivity {private Button mbt01;private Button mbt02;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mbt01=findViewById(R.id.btn1);mbt02=findViewById(R.id.btn2);setListeners();//调用方法}//写一个方法private void setListeners(){OnClick onclick=new OnClick();//实例化onclickmbt01.setOnClickListener(onclick);mbt02.setOnClickListener(onclick);}private class OnClick implements  View.OnClickListener{@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btn1://跳到按钮界面Log.d("btn1", "按钮1被点击了");break;case R.id.btn2://跳到文本框界面Log.d("btn2", "按钮2被点击了");break;}}}
}

这里有个会遇到一个问题,Android中使用switch-case遇到case R.id.xxx报错

运行效果如图:

这里1表示代码,2是虚拟手机界面,3是Logcat窗口,4是点击后的log信息,可以看到按键1 2点击均有相应的反应。

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

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

相关文章

MATLAB 多项式

MATLAB 多项式 MATLAB将多项式表示为行向量&#xff0c;其中包含按幂次降序排列的系数。例如&#xff0c;方程P(x) X 4 7 3 - 5 9可以表示为 p [1 7 0 -5 9]; 求值多项式 polyval函数用于求一个特定值的多项式。例如&#xff0c;在 x 4 时&#xff0c;计算我们之前的多项式…

HTTP URL 详解

概述 URL 提供了一种定位因特网上任意资源的手段&#xff0c;大多数 URL 语法都由以下九个结构的通用格式组成&#xff1a; <scheme>://<user>:<password><host>:<port>/<path>;<params>?<query>#<frag> 方案&#…

命令重装Linux系统,无需登录控制面板

命令重装Linux系统&#xff0c;无需登录控制面板 部分无法登录控制面板使用这个脚本 自动安装安装脚本 wget https://lyvba.com/auto.sh bash auto.sh -d 12 -v 64 -a -p $passwd \--mirror https://mirrors.ustc.edu.cn/debian/安装命令参考 # 自动安装 Debian 10 buster …

基于YOLOV8复杂场景下船舶目标检测系统

1. 背景 海洋作为地球上70%的表面积&#xff0c;承载着人类生活、经济发展和生态系统的重要功能。船舶作为海洋活动的主要载体之一&#xff0c;在海上运输、资源开发、环境监测等方面发挥着重要作用。复杂海洋环境下的船舶目标检测成为了海事管理、海洋资源开发和环境保护等领…

人工智能轨道交通行业周刊-第79期(2024.4.22-5.12)

本期关键词&#xff1a;无人机巡检、车机联控、减速顶、Agent、GraphRAG、RAGFlow 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界铁路那…

2024OD机试卷-API集群负载统计 (java\python\c++)

题目:API集群负载统计 题目描述 某个产品的RESTful API集合部署在 服务器 集群的多个节点上,近期对客户端访问日志进行了采集,需要统计各个API的访问频次,根据热点信息在服务器节点之间做负载 均衡,现在需要实现热点信息统计查询功能。 RESTful API是由多个层级构成,层…

《动手学深度学习》V2(11-18)

文章目录 十一、二 模型选择与过拟合和欠拟合1、模型的选择2、过拟合和欠拟合3、估计模型容量4、线性分类器的VC维5、过拟合欠拟合的代码实现 :fire:①生成数据集②定义评估损失③定义训练函数④三阶多项式函数拟合⑤线性函数拟合(欠拟合)⑤高阶多项式函数拟合(过拟合) 十三、权…

【C语言】精品练习题

目录 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 题目九&#xff1a; 题目十&#xff1a; 题目十一&#xff1a; 题目十二&#xff1a; 题目十…

「 网络安全常用术语解读 」漏洞利用预测评分系统EPSS详解

1. 概览 EPSS&#xff08;Exploit Prediction Scoring System&#xff0c;漏洞利用预测评分系统&#xff09; 提供了一种全新的高效、数据驱动的漏洞管理功能。EPSS是一项数据驱动的工作&#xff0c;使用来自 CVE 的当前威胁信息和现实世界的漏洞数据。 EPSS 模型产生 0 到 1&…

vue 中的 Vuex

Vuex Vuex是什么&#xff1f; 概念&#xff1a;专门在vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xff0c;对Vue应用中多个组件的共享状态进行集中式的管理(读/写&#xff09;&#xff0c;也是一种组件间通信的方式&#xff0c;且适用于任意组件间…

2024最新小红书电商落地实操课,从入门到精通,打造爆款方法(16节课)

你是不是经常在小红书上看到各种各样的推广和引流方法&#xff0c;却感觉实际操作起来很困难&#xff1f; 那么&#xff0c;这门2024最新小红书电商落地实操课就是为你量身定制的&#xff01;从入门到精通&#xff0c;不仅能让你了解电商平台的基本规则和玩法&#xff0c;还能…

ansible------inventory 主机清单

目录 inventory 中的变量 2&#xff09;组变量[webservers:vars] #表示为 webservers 组内所有主机定义变量&#xff0c;所有组内成 员都有效 ansible_userrootansible_passwordabc1234 3&#xff09; [all:vars…

VulkanSDK Demos vkcube 编译失败

操作系统: Windows 11 23H2 Vulkan 版本: 1.3.2.280.0 Visual Studio 版本: 2022 在VulkanSDK/Demos目录下存在一个demo solution,其中包含两个project, vkcube和vkcubepp,两个分别为C语言和C写的示例程序, 但是直接编译这两个project时会编译失败,报了以下错误: fatal err…

[Java EE] 文件IO(一):文件概念与文件系统操作

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (91平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;Java …

LeetCode 每日一题 ---- 【2391.收集垃圾的最少总时间】

LeetCode 每日一题 ---- 【2391.收集垃圾的最少总时间】 2391.收集垃圾的最少总时间方法&#xff1a;模拟&#xff08;多次遍历&#xff09; 2391.收集垃圾的最少总时间 方法&#xff1a;模拟&#xff08;多次遍历&#xff09; 需要注意的点是&#xff0c;处理一个单位的一个…

mysql分页排序的坑,千万注意!

1、问题复现 现象&#xff1a; mysql对无索引字段进行排序后limit &#xff0c;当被排序字段有相同值时并且在limit范围内&#xff0c;取的值并不是正常排序后的值&#xff0c;有可能第一页查询的记录&#xff0c;重复出现在第二页的查询记录中&#xff0c;而且第二页的查询结…

青少年软件编程(Python)等级考试试卷(四级)2024年3月

电子学会2024.03青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;四级&#xff09; 一、单选题 1.运行如下代码&#xff0c;若输入整数3&#xff0c;则最终输出的结果为? ( ) def f(x): if x1: s1 else: sf(x-1)*x return s nint(input("请…

Java RMI SERVER命令执行漏洞

Java RMI SERVER命令执行漏洞 一、介绍二、原理三、复现准备四、漏洞复现 一、介绍 RMI全称是Remote Method Invocation&#xff08;远程方法调用&#xff09;&#xff0c;是专为Java环境设计的远程方法调用机制&#xff0c;远程服务器提供API&#xff0c;客户端根据API提供相…

java性能分析async-profiler

项目地址 github&#xff1a;https://github.com/async-profiler/async-profiler cpu ./asprof -d 600s -f cpu.html pidcpu-wall&#xff1a;表示抓取所有状态下的线程数据&#xff0c;包含&#xff1a;Running, Sleeping or Blocked ./asprof -e wall -d 600s -f cpu-wall…

TypeScript 工具类型

这些工具类型是 TypeScript 提供的强大功能&#xff0c;用于操作和转换类型。下面是每个工具类型的简要说明和示例&#xff1a; 1、Record let value: Record<string, any> { name: "", age: 0, desc: [] }; let value2: { [key: string]: any } { name: &…