安卓開發--新建工程,新建虛擬手機,按鍵事件響應(含: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.pswp.cn/web/10918.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10918.shtml
英文地址,請注明出處:http://en.pswp.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: &…