安卓学习笔记07:事件处理、窗口跳转与传递数据
文章目录
- 零、学习目标
- 一、三个基本控件
- 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、启动应用,测试效果
- 七、课后作业
- 任务:实现用户注册功能
零、学习目标
- 会使用线性布局和三个基本控件设计用户界面
- 能说出安卓事件处理机制的实现步骤
- 能编写代码完成安卓应用的事件处理
- 会使用Intent控件实现窗口的跳转
- 会在不同的窗口之间传递数据(Bundle)
一、三个基本控件
1、标签控件(TextView)
- 类层次继承图
- 常用属性:text、textSize、textColor……
2、编辑框控件(EditText)
- 类层次继承图
- 常用属性:text、textSize、textColor、hint……
3、按钮控件(Button)
- 类层次继承图
- 常用属性:text、background、layout_width、layout_height……
二、安卓事件处理机制
(一)安卓事件处理概述
- 不论是桌面应用还是手机应用程序,需要对用户的动作提供响应,这种为用户动作提供响应的机制就是事件处理。
- 安卓提供了两种事件处理机制:基于回调的事件处理和基于监听的事件处理。
- 基于监听的事件处理是一种“面向对象”的事件处理,涉及三种对象:事件源(EventSource)、事件(Event)、事件监听器(EventListener)。
- 基于监听的事件处理流程图
(二)安卓事件处理步骤
- 以按钮单击事件处理为例说明安卓事件处理步骤
- 在界面类里声明按钮控件变量
- 通过findViewById()方法得到按钮实例
- 利用setOnClickListener()方法给按钮注册单击事件监听器
- 实现单击事件监听器接口,采用匿名实现方式
- 在接口的抽象方法里编写事件处理代码
三、案例演示:实现用户登录功能
《安卓学习笔记04》课后作业让大家做一个登录窗口,本案例对按钮进行事件处理,如果登录成功,弹出吐司提示用户登录成功,否则弹出吐司提示用户登录失败。
(一)运行效果
(二)涉及知识点
- 线性布局(LinearLayout)
- 标签(TextView)
- 编辑框(EditText)
- 按钮(Button)
- 安卓事件处理机制(Event Handling Mechanism)
- 吐司(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接口的实体对
六、案例演示:修改用户登录程序
当登录成功,跳转到主窗口,显示用户名与密码。
(一)运行效果
(二)涉及知识点
- 线性布局(LinearLayout)
- 标签(TextView)
- 编辑框(EditText)
- 按钮(Button)
- 安卓事件处理机制
- 吐司(Toast)
- 意图(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:事件处理、窗口跳转与传递数据相关推荐
- 【EF学习笔记07】----------加载关联表的数据 贪婪加载
[EF学习笔记07]----------加载关联表的数据 贪婪加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 贪婪加载 //贪婪加载 using (var db = new Entitie ...
- 2020年安卓学习笔记目录
文章目录 一.讲课笔记 二.安卓案例 三.安卓实训项目 四.学生安卓学习博客 五.安卓课后作业 (一)界面设计练习 1.制作登录界面 2.制作部队管理界面 3.制作灭火救援界面 4.制作交付界面 5. ...
- JavaScript学习笔记07【6个经典案例——电灯开关、轮播图、自动跳转首页、动态表格、表格全选、表单验证】
Java后端 学习路线 笔记汇总表[黑马程序员] w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符. ...
- MySQL学习笔记07【事务、用户管理和权限管理】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- Python学习笔记:利用控制器跳转不同页面
Python学习笔记:利用控制器跳转不同页面 程序需要用到数据库student里的学生表t_student 1.创建python项目demo02 2.创建页面index.html 3.创建控制器con ...
- 《机电传动控制》学习笔记-07
<机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1. ...
- Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理
Liunx学习笔记 - 07 - 02 正则表达式与文件格式化处理 1 前言:啥是正则表达式 简单来讲,正则表达式是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的 ...
- JavaWeb黑马旅游网-学习笔记07【旅游线路查询】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- 很low的安卓学习笔记(一、实用技巧)
很low的安卓学习笔记(一.实用技巧) 一.学习了几天的实用技巧小总结: 1.规范的定义内容的格式: 2.一些快捷键 3.将xxx.xml布局改为Activity中可以调用的View视图 4.当左下角 ...
最新文章
- 那些年,面试被虐过的红黑树
- HihoCoder#1509 : 异或排序(二进制)
- Hexo搭建个人博客常用命令
- MySQL -> ES 数据同步 配置步骤
- html前端如何缓存页面,Nuxt中如何做页面html缓存
- ERROR! The server quit without updating PID file解决办法
- 微信认证结果拆分为资质审核和名称审核
- 执行计划之CONCATENATION
- B站飞机大战源码、素材
- 《金字塔原理》学习笔记 | 第4篇—演示的逻辑
- 智慧城市大数据运营中心,发挥大数据价值
- android 当手柄打游戏,玩手游需不需要配手柄?谈移动游戏外设的三个机会
- 基于C语言的端口扫描工具设计与实现
- uniapp 微信授权 登陆
- 内网,外网ip(路由器ip,公网ip)的分别以及如何查询
- 开放银行赋能供应链金融,连接企业生态场景
- Xdebug中文文档-安装
- java开源tts_开源TTS(Text To Speah)的选择和使用
- python字符串切片输出_python 字符串 切片
- 【充电站】_世俗智慧_哲学智慧_.
热门文章
- 挑战10个最难的Java面试题(附答案)【下】
- Spring Boot Java应用代码混淆介绍
- 云上自动化 vs 云上编排
- 【华为云动态】华为云开放日发布云专家激励计划,要将开发者“宠”上天
- 根据企业财务进行风险分析——基于pytorch
- 如何读取tensorboard文件 展现可视化
- TikZ学习笔记(一) 基本图形
- No dashboards are active for the current data set. 解决tensorboard无法启动和显示问题
- android 多平台发布,内容多平台发布
- centos mysql 主从_Centos下MySQL主从同步配置