• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓學習筆記07:事件處理、窗口跳轉與傳遞數據

    標簽: 安卓應用開發

    文章目錄

    零、學習目標

    1. 會使用線性布局和三個基本控件設計用戶界面
    2. 能說出安卓事件處理機制的實現步驟
    3. 能編寫代碼完成安卓應用的事件處理
    4. 會使用Intent控件實現窗口的跳轉
    5. 會在不同的窗口之間傳遞數據(Bundle)

    一、三個基本控件

    1、標簽控件(TextView)

    • 類層次繼承圖
      在這里插入圖片描述
    • 常用屬性:text、textSize、textColor……

    2、編輯框控件(EditText)

    • 類層次繼承圖
      在這里插入圖片描述
    • 常用屬性:text、textSize、textColor、hint……

    3、按鈕控件(Button)

    • 類層次繼承圖
      在這里插入圖片描述
    • 常用屬性:text、background、layout_width、layout_height……

    二、安卓事件處理機制

    (一)安卓事件處理概述

    • 不論是桌面應用還是手機應用程序,需要對用戶的動作提供響應,這種為用戶動作提供響應的機制就是事件處理。
    • 安卓提供了兩種事件處理機制:基于回調的事件處理和基于監聽的事件處理。
    • 基于監聽的事件處理是一種“面向對象”的事件處理,涉及三種對象:事件源(EventSource)、事件(Event)、事件監聽器(EventListener)。
    • 基于監聽的事件處理流程圖
      在這里插入圖片描述

    (二)安卓事件處理步驟

    • 以按鈕單擊事件處理為例說明安卓事件處理步驟
      1. 在界面類里聲明按鈕控件變量
      2. 通過findViewById()方法得到按鈕實例
      3. 利用setOnClickListener()方法給按鈕注冊單擊事件監聽器
      4. 實現單擊事件監聽器接口,采用匿名實現方式
      5. 在接口的抽象方法里編寫事件處理代碼

    三、案例演示:實現用戶登錄功能

    《安卓學習筆記04》課后作業讓大家做一個登錄窗口,本案例對按鈕進行事件處理,如果登錄成功,彈出吐司提示用戶登錄成功,否則彈出吐司提示用戶登錄失敗。

    (一)運行效果

    在這里插入圖片描述

    (二)涉及知識點

    1. 線性布局(LinearLayout)
    2. 標簽(TextView)
    3. 編輯框(EditText)
    4. 按鈕(Button)
    5. 安卓事件處理機制
    6. 吐司(Toast)

    (三)實現步驟

    1、創建安卓應用【UserLogin】

    在這里插入圖片描述
    在這里插入圖片描述

    2、添加背景圖片

    • 將背景圖片background.jpg放在res/drawable目錄
      在這里插入圖片描述

    3、基于模板創建登錄窗口LoginActivity

    • 基于Empty Activity模板創建
      在這里插入圖片描述
      在這里插入圖片描述
      在這里插入圖片描述

    4、登錄窗口布局資源文件activity_login.xml

    在這里插入圖片描述

    • gravity:用于設置容器的子控件的對齊方式,或控件的內容的對齊方式
    • orientation:線性布局的方向(horizontal——橫向、vertical——縱向)
    • padding:內邊距,用于設置子控件與父容器邊框的距離,或控件的內容與控件邊框的距離;(paddingLeft、paddingRight、paddingTop、paddingBottom)
    • layout_margin:外邊距,用于設置控件之間的距離;(layout_marginLeft,layout_marginRight、layout_marginTop、layout_marginBottom)
    • hint:用于設置編輯框的提示內容,當編輯框為空時就顯示出來,一旦有內容就立馬消失。
    • singleLine:用于設置編輯框是否為單行輸入,取值為“true”,那就是單行輸入。

    5、主窗口布局資源文件activity_main.xml

    在這里插入圖片描述

    6、項目清單文件

    • 刪除MainActivity元素的意圖過濾器
      在這里插入圖片描述

    7、字符串資源文件strings.xml

    在這里插入圖片描述

    <resources>
        <string name="app_name">用戶登錄</string>
        <string name="user_login">用戶登錄</string>
        <string name="username">用戶:</string>
        <string name="input_username">請輸入用戶名</string>
        <string name="password">密碼:</string>
        <string name="input_password">請輸入密碼</string>
        <string name="login">登錄</string>
        <string name="cancel">取消</string>
    </resources>
    

    8、登錄窗口LoginActivity

    在這里插入圖片描述

    (1)聲明控件變量

    在這里插入圖片描述

    (2)通過資源標識符獲取控件實例

    在這里插入圖片描述

    (3)登錄按鈕事件處理

    • 給登錄按鈕注冊監聽器,實現監聽器接口,并且編寫事件處理代碼
      在這里插入圖片描述

    (4)取消按鈕事件處理

    • 給取消按鈕注冊監聽器,實現監聽器接口,并且編寫事件處理代碼
      在這里插入圖片描述

    9、啟動應用,查看效果

    在這里插入圖片描述

    (1)輸入用戶名與密碼正確的情況

    在這里插入圖片描述

    (2)輸入用戶名或密碼錯誤的情況

    在這里插入圖片描述

    四、利用意圖啟動組件

    (一)使用顯式意圖啟動組件

    • 假設有兩個窗口:FirstActivity和SecondActivity

    方式一

    Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
    startActivity(intent);
    

    方式二

    Intent intent = new Intent();
    intent.setClass(FirstActivity.this, SecondActivity.class);
    startActivity(intent);
    

    方式三

    Intent intent = new Intent();
    ComponentName component = new ComponentName(FirstActivity.this, SecondActivity.class);
    intent.setComponent(component);
    startActivity(intent);
    

    (二)使用隱式意圖啟動組件

    1、在Java代碼創建隱式意圖

    Intent intent = new Intent();
    intent.setAction("net.hw.ACTION_NEXT");
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    startActivity(intent);
    

    2、在項目清單文件里設置意圖過濾器

    <activity android:name="net.hw.SecondActivity">
        <intent-filter>
           <action android:name="net.hw.ACTION_NEXT" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
    </activity>
    

    五、利用意圖傳遞數據

    (一)傳遞單項數據

    • 在起始組件通過意圖傳遞單項數據
    // 通過意圖傳遞單項數據
    intent.putExtra("username", strUsername);
    intent.putExtra("password", strPassword);
    
    • 在目標組件通過意圖獲取單項數據
    // 通過意圖獲取單項數據
    String username = intent.getStringExtra("username");
    String password = intent.getStringExtra("password");
    

    (二)傳遞數據包

    1、在起始組件通過意圖攜帶數據包

    // 創建數據包,封裝數據
    Bundle data = new Bundle();
    data.putString("username", strUsername);
    data.putString("password", strPassword);
    // 通過意圖攜帶數據包
    intent.putExtras(data);
    

    2、在目標組件通過意圖獲取數據包

    // 獲取意圖攜帶的數據包
    Bundle data = intent.getExtras();
    // 從數據包里按鍵取值獲取各項數據
    String username = data.getString("username");
    String password = data.getString("password");
    

    (三)傳遞實體對象

    1、傳遞實現了Serializable接口的實體對象

    • 參看【六、案例演示:修改用戶登錄程序】

    2、傳遞實現了Parcelable接口的實體對

    六、案例演示:修改用戶登錄程序

    當登錄成功,跳轉到主窗口,顯示用戶名與密碼。

    (一)運行效果

    在這里插入圖片描述

    (二)涉及知識點

    1. 線性布局(LinearLayout)
    2. 標簽(TextView)
    3. 編輯框(EditText)
    4. 按鈕(Button)
    5. 安卓事件處理機制
    6. 吐司(Toast)
    7. 意圖(Intent)
      (1)功能作用:聯系安卓不同組件之間的一個重要橋梁
      (2)使用方式:本案例采用顯式意圖啟動組件方式實現窗口跳轉

    (三)實現步驟

    1、修改登錄界面LoginActivity

    • 創建顯式意圖,利用意圖攜帶數據,按照意圖啟動目標組件
      在這里插入圖片描述

    2、修改主界面MainActivity

    • 接收登錄界面通過意圖傳遞的數據并顯示在標簽里
      在這里插入圖片描述

    3、啟動應用,查看效果

    在這里插入圖片描述

    (1)輸入用戶名與密碼正確的情況

    在這里插入圖片描述
    在這里插入圖片描述
    在這里插入圖片描述

    (2)輸入用戶名或密碼錯誤的情況

    在這里插入圖片描述

    4、修改登錄界面LoginActivity

    在這里插入圖片描述

    5、修改主界面MainActivity

    在這里插入圖片描述

    6、啟動應用,測試效果

    在這里插入圖片描述

    7、創建用戶實體類

    • 創建用戶實體類,實現Serializable接口
      在這里插入圖片描述
    package net.hw.userlogin;
    
    import java.io.Serializable;
    
    /**
     * 功能:用戶類
     * 作者:華衛
     * 日期:2020年09月17日
     */
    public class User implements Serializable {
        private String username;
        private String password;
    
        public User() {
        }
    
        public User(String username, String password) {
            this.username = username;
            this.password = password;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    

    8、修改登錄界面LoginActivity

    在這里插入圖片描述

    9、修改主界面MainActivity

    在這里插入圖片描述

    10、啟動應用,測試效果

    在這里插入圖片描述

    七、課后作業

    任務:實現用戶注冊功能

    在這里插入圖片描述

    • 注冊窗口
      在這里插入圖片描述
    • 顯示注冊信息窗口
      在這里插入圖片描述
    版權聲明:本文為howard2005原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/howard2005/article/details/108648192

    智能推薦

    案例講解安卓的事件傳遞機制

    首先關于安卓的事件傳遞機制我們需要知道一些東西: View的繼承關系,有關事件的幾個方法: 跟Touch事件有關的處理方法主要有三個: //分派事件 public boolean dispatchTouchEvent(MotionEvent ev) //攔截事件 public boolean onInterceptTouchEvent(MotionEvent ev) //處理事件 public b...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    猜你喜歡

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

    基于TCP/IP的網絡聊天室用Java來實現

    基于TCP/IP的網絡聊天室實現 開發工具:eclipse 開發環境:jdk1.8 發送端 接收端 工具類 運行截圖...

    精品国产乱码久久久久久蜜桃不卡