一.目标
1.了解基本控件
2.理解安卓事件处理机制
3.使用意图启动组件
4.掌握窗口跳转与传递数据
二、课程记录
(一)三个基本控件的类层次继承图及其常用属性
- 选中控件名(如TexView)再按住 "CTRL + H "组合键 即可查看其类层次继承图。
1.标签控件(TextView)
2.编辑框控件(EditText)
3.控件常用属性
(二)安卓事件处理机制**
1.概述
- 程序为用户动作提供响应的机制就是事件处理。
- 安卓提供了两种事件处理机制:基于回调的事件处理和基于监听的事件处理
- 基于监听的事件处理是一种“面向对象”的事件处理,涉及三种对象:事件源(EventSource)、事件(Event)、事件监听器(EventListener)
(三)案例:实现用户登录
1、创建项目
- 基于Empty Activity 创建一个项目
- 配置项目基本信息
- 准备一张背景图片(background.png)拷贝到drawable目录中
2、字符串资源文件
- 在字符串资源文件strings.xml里定义字符串变量
3、基于模板创建登录窗口
- 在layout目录中,基于Empty Activity模板创建LoginActivity
4、打开登陆窗口布局文件
- activity_login.xml
- 修改其布局方式,并设置以下属性
- 添加用户登录标签
- 添加一个水平方向的线性布局 再在其中添加输入用户名的标签和编辑框
- 添加一个水平方向的线性布局 再在其中添加输入用户名的标签和编辑框
-
添加一个水平方向的线性布局 再在其中 添加登录按钮和取消按钮
5、主窗口布局资源文件 -
activity_main.xml
6、安卓项目清单文件 -
打开安卓项目清单文件AndroidManifest.xml,
- 删除MainAcivity元素包含的意图过滤器
8、登录窗口功能实现
- LoginActivity
(1)声明控件变量 - 定义两个编辑框变量和两个按钮变量
(2)获取控件实例 - 通过findViewById()方法获取控件实例
(3)登录按钮事件处理
- 给登录按钮注册单击监听器,实现监听器接口
- 编写事件处理代码
- 获取用户输入的用户名和密码
- 判断是否正确,弹出不同的吐司
(4)取消按钮事件处理
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
package net.hxl.example.userlogin;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends AppCompatActivity {
private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private Button btnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_login);
// 通过资源标识符(id)获取控件实例
etUsername = findViewById(R.id.et_username);
etPassword = findViewById(R.id.et_password);
btnLogin = findViewById(R.id.btn_login);
btnCancel = findViewById(R.id.btn_cancel);
// 为登录按钮注册单价监听器
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 获取两个编辑的数据(trim():去除字符串前后的空格)
String strUsername = etUsername.getText().toString().trim();
String strPassword = etPassword.getText().toString().trim();
// 判断用户与密码是否正确
if (strUsername.equals("hxl") && strPassword.equals("123456")){
//三个参数:参数1-上下问:参数2:土司内容(字符串):参数3:土司持续时间
Toast.makeText(LoginActivity.this,"恭喜,用户名和密码正确!",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(LoginActivity.this,"遗憾,用户名和密码错误!",Toast.LENGTH_SHORT).show();
}
}
});
// 给取消按钮注册单击监听器
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//关闭当前窗口
finish();
}
});
}
}
(5)启动应用,查看效果
- 输入正确用户名与密码
- 输入错误的用户名或密码
(6)优化用户登录界面
-
指定两个编辑框的宽度
-
最后效果
(四) 修改登录窗口代码(LoginActivity.java) -
创建意图,通过意图携带数据(打包数据)
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
package net.hxl.example.userlogin;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends AppCompatActivity {
private EditText etUsername;
private EditText etPassword;
private Button btnLogin;
private Button btnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源文件设置用户界面
setContentView(R.layout.activity_login);
// 通过资源标识符(id)获取控件实例
etUsername = findViewById(R.id.et_username);
etPassword = findViewById(R.id.et_password);
btnLogin = findViewById(R.id.btn_login);
btnCancel = findViewById(R.id.btn_cancel);
// 为登录按钮注册单价监听器
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 获取两个编辑的数据(trim():去除字符串前后的空格)
String strUsername = etUsername.getText().toString().trim();
String strPassword = etPassword.getText().toString().trim();
// 判断用户与密码是否正确
if (strUsername.equals("hxl") && strPassword.equals("123456")){
// 三个参数:参数1-上下问;参数2-土司内容(字符串);参数3-土司持续时间
Toast.makeText(LoginActivity.this,"恭喜,用户名和密码正确!",Toast.LENGTH_SHORT).show();
// 创建显示意图(参数1-包上下文:参数2-目标组件)
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
// 通过意图携带数据
intent.putExtra("username", strUsername);
intent.putExtra("password", strPassword);
// 按照意图启动目标组件
startActivity(intent);
} else {
Toast.makeText(LoginActivity.this,"很遗憾,用户名和密码错误!",Toast.LENGTH_SHORT).show();
}
}
});
// 给取消按钮注册单击监听器
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//关闭当前窗口
finish();
}
});
}
}
(五)修改著串口代码(MainActivity.java)
- 通过意图携带的数据包,拼接数据并显示
- 重启应用,查看效果
- 录屏