目录
七、运行程序
一、创建安卓项目
- 选择Empty Activity类型
- 设置项目信息
- 右键运行
二、添加图片
- 将需要用的三张图片拷贝到mipmap文件下
三、创建按钮配置文件
- 在drawable目录下创建button_border.xml文件
- 编辑文件信息
- 编写文件代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#0a0934" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
<stroke
android:width="0.5dp"
android:color="#787878" />
</shape>
四、字符串资源文件内定义变量
- 源代码
<resources>
<string name="app_name">用户登录</string>
<string name="username_hint">输入用户名</string>
<string name="password_hint">输入密码</string>
<string name="login">登录</string>
<string name="cancel">取消</string>
</resources>
五、编写主布局资源文件
- 源代码
<?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:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:layout_weight="2">
<ImageView
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@mipmap/users"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
android:layout_weight="1"
android:gravity="center"
android:padding="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/user"/>
<EditText
android:id="@+id/edt_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/username_hint"
android:singleLine="true"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@mipmap/pwd"/>
<EditText
android:id="@+id/edt_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password_hint"
android:singleLine="true"
android:inputType="textPassword"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center_horizontal"
android:layout_weight="1">
<Button
android:id="@+id/btn_login"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="@string/login"
android:textSize="20sp"
android:background="@drawable/button_border"
android:layout_marginRight="10dp"/>
<Button
android:id="@+id/btn_cancel"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:textSize="20sp"
android:background="@drawable/button_border"/>
</LinearLayout>
</LinearLayout>
- 运行后的效果
六、编写主界面代码
- 声明变量
- 获取控件实例
- 给【登录】按钮编写事件处理方法
- 给【取消】按钮编写事件处理方法
- 源代码
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText edtUsername;
private EditText edtPassword;
private Button btnLogin;
private Button btnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源设置用户界面
setContentView(R.layout.activity_main);
// 通过资源标识符获取控件实例
edtUsername = findViewById(R.id.edt_username);
edtPassword = findViewById(R.id.edt_password);
btnLogin = findViewById(R.id.btn_login);
btnCancel = findViewById(R.id.btn_cancel);
// 给【登录】按钮注册监听器,实现监听器接口,编写事件处理方法
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 获取用户输入的数据
String username = edtUsername.getText().toString().trim();
String password = edtPassword.getText().toString().trim();
// 判断用户登录是否成功(设置合法的用户名和密码
if (username.equals("howard") && password.equals("903213")) {
Toast.makeText(MainActivity.this,"登录成功,欢迎访问系统~", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "登录失败,用户名或密码错误~", Toast.LENGTH_LONG).show();
// 清空用户名和密码文本框
edtUsername.setText("");
edtPassword.setText("");
// 让用户名文本框获取焦点
edtUsername.requestFocus();
}
}
});
// 给【取消】按钮注册监听器,实现监听器接口,编写事件处理方法
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 关闭当前窗口
finish();
}
});
}
}
七、运行程序
- 效果录屏
八、换一种事件处理方式
- 给两个按钮android:onClick,绑定事件处理方法
- 不再定义按钮变量,获取按钮实例,注册监听器,只需要两个事件处理方法:doLogin(View v)与doCancel(View v)
- 源代码
package net.zhoushuai.login;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText edtUsername;
private EditText edtPassword;
private Button btnLogin;
private Button btnCancel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 利用布局资源设置用户界面
setContentView(R.layout.activity_main);
// 通过资源标识符获取控件实例
edtUsername = findViewById(R.id.edt_username);
edtPassword = findViewById(R.id.edt_password);
}
/**
* 登录事件处理方法
*
* @param v
*/
public void doLogin(View v){
// 获取用户输入的数据
String username = edtUsername.getText().toString().trim();
String password = edtPassword.getText().toString().trim();
// 判断用户登录是否成功(设置合法的用户名和密码
if (username.equals("howard") && password.equals("903213")) {
Toast.makeText(MainActivity.this,"登录成功,欢迎访问系统~", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "登录失败,用户名或密码错误~", Toast.LENGTH_LONG).show();
// 清空用户名和密码文本框
edtUsername.setText("");
edtPassword.setText("");
// 让用户名文本框获取焦点
edtUsername.requestFocus();
}
}
/**
* 取消事件处理方法
*
* @param v
*/
public void doCancel(View v){
// 关闭当前窗口
finish();
}
}
- 运行程序,测试两个按钮的功能
九、修改主界面的名称
十、 创建主界面
十一、修改登录界面代码
十二、修改主布局资源文件
- 将布局改为线性布局
- 添加背景图片
十三、编写主界面代码
十四、修改主界面的活动栏标题
十五、运行程序,查看效果