文章目录

  • 零、学习目标
  • 一、三个基本控件
    • 1、标签控件(TextView)
    • 2、编辑框控件(EditText)
    • 3、按钮控件(Button)
  • 二、安卓事件处理机制
    • (一)安卓事件处理概述
    • (二)安卓事件处理步骤
  • 三、案例演示:实现用户登录功能
    • (一)运行效果
    • (二)涉及知识点
    • (三)实现步骤
      • 1、创建安卓应用【UserLogin】
      • 2、添加背景图片background.jpg
      • 3、基于模板创建登录窗口LoginActivity
      • 4、登录窗口布局资源文件activity_login.xml
      • 5、主窗口布局资源文件activity_main.xml
      • 6、项目清单文件AndroidManifest.xml
      • 7、字符串资源文件strings.xml
      • 8、登录窗口LoginActivity
        • (1)声明控件变量
        • (2)通过资源标识符获取控件实例
        • (3)登录按钮事件处理
        • (4)取消按钮事件处理
      • 9、启动应用,查看效果
        • (1)输入用户名与密码正确的情况
        • (2)输入用户名或密码错误的情况
  • 四、利用意图启动组件
    • (一)使用显式意图启动组件
      • 方式一
      • 方式二
      • 方式三
    • (二)使用隐式意图启动组件
      • 1、在Java代码创建隐式意图
      • 2、在项目清单文件里设置意图过滤器
  • 五、利用意图传递数据
    • (一)传递单项数据
    • (二)传递数据包
      • 1、在起始组件通过意图携带数据包
      • 2、在目标组件通过意图获取数据包
    • (三)传递实体对象
      • 1、传递实现了Serializable接口的实体对象
      • 2、传递实现了Parcelable接口的实体对
  • 六、案例演示:修改用户登录程序
    • (一)运行效果
    • (二)涉及知识点
    • (三)实现步骤
      • 1、修改登录界面LoginActivity
      • 2、修改主界面MainActivity
      • 3、启动应用,查看效果
        • (1)输入用户名与密码正确的情况
        • (2)输入用户名或密码错误的情况
      • 4、修改登录界面LoginActivity
      • 5、修改主界面MainActivity
      • 6、启动应用,测试效果
      • 7、创建用户实体类
      • 8、修改登录界面LoginActivity
      • 9、修改主界面MainActivity
      • 10、启动应用,测试效果
  • 七、课后作业
    • 任务:实现用户注册功能

零、学习目标

  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. 安卓事件处理机制(Event Handling Mechanism)
  6. 吐司(Toast)

(三)实现步骤

1、创建安卓应用【UserLogin】


2、添加背景图片background.jpg

  • 将背景图片background.jpg放在res/drawable目录

3、基于模板创建登录窗口LoginActivity

  • 基于Empty Activity模板创建


4、登录窗口布局资源文件activity_login.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:background="@drawable/background"android:gravity="center"android:padding="15dp"android:orientation="vertical" ><TextViewandroid:id="@+id/tvUserLogin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="30dp"android:text="@string/user_login"android:textColor="#ff00ff"android:textSize="25sp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" ><TextViewandroid:id="@+id/tvUsername"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/username"android:textColor="#000000"android:textSize="20sp" /><EditTextandroid:id="@+id/edtUsername"android:layout_width="150dp"android:layout_height="wrap_content"android:ems="10"android:hint="@string/input_username"android:singleLine="true" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" ><TextViewandroid:id="@+id/tvPassword"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/password"android:textColor="#000000"android:textSize="20sp" /><EditTextandroid:id="@+id/edtPassword"android:layout_width="150dp"android:layout_height="wrap_content"android:ems="10"android:hint="@string/input_password"android:inputType="textPassword"android:singleLine="true" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="30dp"android:gravity="center_horizontal"android:orientation="horizontal" ><Buttonandroid:id="@+id/btnLogin"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="30dp"android:paddingRight="30dp"android:text="@string/login"android:textSize="20sp" /><Buttonandroid:id="@+id/btnCancel"android:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingLeft="30dp"android:paddingRight="30dp"android:text="@string/cancel"android:textSize="20sp" /></LinearLayout></LinearLayout>
  • gravity:用于设置容器的子控件的对齐方式,或控件的内容的对齐方式
  • orientation:线性布局的方向(horizontal——横向、vertical——纵向)
  • padding:内边距,用于设置子控件与父容器边框的距离,或控件的内容与控件边框的距离;(paddingLeft、paddingRight、paddingTop、paddingBottom)
  • layout_margin:外边距,用于设置控件之间的距离;(layout_marginLeft,layout_marginRight、layout_marginTop、layout_marginBottom)
  • hint:用于设置编辑框的提示内容,当编辑框为空时就显示出来,一旦有内容就立马消失。
  • singleLine:用于设置编辑框是否为单行输入,取值为“true”,那就是单行输入。
  • 思考题:如何将按钮改成微信登录按钮的配色。
  • #04be02
  • #07bcfc

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/background"android:gravity="center"tools:context=".MainActivity"><TextViewandroid:id="@+id/tvMessage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="25dp"android:textColor="#0000ff"/>
</LinearLayout>

6、项目清单文件AndroidManifest.xml

  • 删除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、启动应用,测试效果

七、课后作业

任务:实现用户注册功能

  • 注册窗口
  • 显示注册信息窗口

安卓学习笔记07:事件处理、窗口跳转与传递数据相关推荐

  1. 【EF学习笔记07】----------加载关联表的数据 贪婪加载

    [EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...

  2. 2020年安卓学习笔记目录

    文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...

  3. JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】

    Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...

  4. MySQL学习笔记07【事务、用户管理和权限管理】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  5. Python学习笔记:利用控制器跳转不同页面

    Python学习笔记:利用控制器跳转不同页面 程序需要用到数据库student里的学生表t_student 1.创建python项目demo02 2.创建页面index.html 3.创建控制器con ...

  6. 《机电传动控制》学习笔记-07

    <机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1.  ...

  7. Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理

    Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理 1 前言:啥是正则表达式 简单来讲,正则表达式是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的 ...

  8. JavaWeb黑马旅游网-学习笔记07【旅游线路查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  9. 很low的安卓学习笔记(一、实用技巧)

    很low的安卓学习笔记(一.实用技巧) 一.学习了几天的实用技巧小总结: 1.规范的定义内容的格式: 2.一些快捷键 3.将xxx.xml布局改为Activity中可以调用的View视图 4.当左下角 ...

最新文章

  1. 那些年,面试被虐过的红黑树
  2. HihoCoder#1509 : 异或排序(二进制)
  3. Hexo搭建个人博客常用命令
  4. MySQL -> ES 数据同步 配置步骤
  5. html前端如何缓存页面,Nuxt中如何做页面html缓存
  6. ERROR! The server quit without updating PID file解决办法
  7. 微信认证结果拆分为资质审核和名称审核
  8. 执行计划之CONCATENATION
  9. B站飞机大战源码、素材
  10. 《金字塔原理》学习笔记 | 第4篇—演示的逻辑
  11. 智慧城市大数据运营中心,发挥大数据价值
  12. android 当手柄打游戏,玩手游需不需要配手柄?谈移动游戏外设的三个机会
  13. 基于C语言的端口扫描工具设计与实现
  14. uniapp 微信授权 登陆
  15. 内网,外网ip(路由器ip,公网ip)的分别以及如何查询
  16. 开放银行赋能供应链金融,连接企业生态场景
  17. Xdebug中文文档-安装
  18. java开源tts_开源TTS(Text To Speah)的选择和使用
  19. python字符串切片输出_python 字符串 切片
  20. 【充电站】_世俗智慧_哲学智慧_.

热门文章

  1. 挑战10个最难的Java面试题(附答案)【下】
  2. Spring Boot Java应用代码混淆介绍
  3. 云上自动化 vs 云上编排
  4. 【华为云动态】华为云开放日发布云专家激励计划,要将开发者“宠”上天
  5. 根据企业财务进行风险分析——基于pytorch
  6. 如何读取tensorboard文件 展现可视化
  7. TikZ学习笔记(一) 基本图形
  8. No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题
  9. android 多平台发布,内容多平台发布
  10. centos mysql 主从_Centos下MySQL主从同步配置