使用SQLiteOpenHelper实现自定义的MyHelper实现用户信息的增、删、查、改
希望大家能给我提出一些建议,欢迎多多交流。如果各位看官很满意,求赏一个👍,不胜感激!
1 功能
1.1 登录
1、检查用户名与密码是否为空
当用户名与密码有任意一项为空时,提示“用户名、密码都不能为空!”
2、检查用户名与密码是否正确
当用户与密码都不为空时,首先判断用户是否存在。若用户不存在,提示“抱歉,此用户不存在!”,若此用户存在,从数据库查询此用户的密码,判断用户密码是否输入正确。若输入错误,提示“密码错误!”。当用户名与密码都输入正确,提示“成功登录!”,并跳转到用户管理页面
3、记住用户名与密码
当单选框被选中时,使用SharedPreferences完成用户登录信息的暂时保存,将checkBox的选中状态保存也进行保存(为了保证下次登录时,checkBox仍保持被选中状态)
1.2 注册
1、用户名与密码和确认密码都不能为空
2、检查用户名是否被注册
3、确认密码与密码是否相同
4、当用户注册成功时,将注册成功的用户信息填充在用户界面上
1.3 用户管理
1、查询用户
使用模糊查询用户
2、当查询结果为空时
3.添加用户
判断将要添加的用户是否存在,当用户已存在时,再次添加此用户会提示“此用户已存在!”
若不存在此用户,会弹出添加用户信息的对话框
4、编辑用户信息
点击某一用户,弹出编辑用户信息对话框,修改信息
4.删除用户
长按某一用户,弹出删除用户对话框
删除用户之后
2 代码
2.1 自定义的MyHelper
创建user表
package com.example.homeworknine;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table if not exists user(" +
"id integer primary key autoincrement," +
"username varchar(20) not null," +
"password varchar(20) not null," +
"phone varchar(20) default ''," +
"address varchar(20) default '')";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
System.out.println("当前版本为"+newVersion);
}
}
2.2 主界面
使用SharedPreferences实现记住用户功能
package com.example.homeworknine;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText editText1,editText2;
private CheckBox checkBox;
private Button button1,button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText1 = findViewById(R.id.editText1);
editText2 = findViewById(R.id.editText2);
checkBox = findViewById(R.id.checkBox);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
//使用SharedPreferences保存用户名和密码
SharedPreferences sp = getPreferences(MODE_PRIVATE);
final SharedPreferences.Editor editor = sp.edit();
editText1.setText(sp.getString("username",""));
editText2.setText(sp.getString("password",""));
//获取checkBox的勾选状态
checkBox.setChecked(sp.getBoolean("flag",false));
//登录按钮
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = editText1.getText().toString();
String password = editText2.getText().toString();
//判断用户是否输入了用户名、密码
if (!TextUtils.isEmpty(username)&&!TextUtils.isEmpty(password)){
MyHelper myHelper = new MyHelper(MainActivity.this,"information",null,1);
SQLiteDatabase db = myHelper.getReadableDatabase();
Cursor cursor1 = db.rawQuery("select * from user where username = ?",new String[]{username});
//判断此用户是否存在
if (cursor1.moveToNext()){
Cursor cursor2 = db.rawQuery("select password from user where username = ?",new String[]{username});
cursor2.moveToNext();
//判断用户输入的密码是否正确
if (cursor2.getString(0).equals(password)){
//是否记住密码
if (checkBox.isChecked()){
editor.putString("username",username);
editor.putString("password",password);
//保存checkBox的勾选状态
editor.putBoolean("flag",checkBox.isChecked());
editor.commit();
}else {
editor.clear();
editor.commit();
}
Toast.makeText(MainActivity.this,"成功登录!",Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,UserManageActivity.class);
startActivity(intent);
finish();
}else {
Toast.makeText(MainActivity.this,"密码错误!",Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(MainActivity.this,"抱歉,此用户不存在!",Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(MainActivity.this,"用户名、密码都不能为空!",Toast.LENGTH_SHORT).show();
}
}
});
//点击注册按钮,跳转到注册界面
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(MainActivity.this,RegisterActivity.class);
startActivityForResult(intent,100);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==100){
//填充从注册界面返回的用户名和密码
editText1.setText(data.getExtras().get("username")+"");
editText2.setText(data.getExtras().get("password")+"");
}
}
}
2.3 注册界面
完成用户注册
package com.example.homeworknine;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class RegisterActivity extends AppCompatActivity {
private EditText editText1,editText2,editText3;
private Button button1,button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
editText1 = findViewById(R.id.editText1);
editText2 = findViewById(R.id.editText2);
editText3 = findViewById(R.id.editText3);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
//返回登陆页面
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RegisterActivity.this,MainActivity.class);
startActivity(intent);
}
});
//注册
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//用户名
String username = editText1.getText().toString();
//密码
String password = editText2.getText().toString();
//确认密码
String rePassword = editText3.getText().toString();
//判断用户名、密码、确认密码是否为空
if(!TextUtils.isEmpty(username)&&!TextUtils.isEmpty(password)&&!TextUtils.isEmpty(rePassword)) {
MyHelper myHelper = new MyHelper(RegisterActivity.this, "information", null, 1);
SQLiteDatabase db = myHelper.getReadableDatabase();
Cursor cursor1 = db.rawQuery("select * from user where username = ?",new String[]{username});
//判断用户名是否被注册
if (cursor1.moveToNext()){
Toast.makeText(RegisterActivity.this,"此用户名已被注册,换一个试试!",Toast.LENGTH_SHORT).show();
}else {
//判断两次输入密码是否一致
if (password.equals(rePassword)){
db.execSQL("insert into user(username,password) values(?,?)",new String[]{username,password});
Cursor cursor2 = db.rawQuery("select * from user where username = ? and password = ?",new String[]{username,password});
//判断是否注册成功
if (cursor2.moveToNext()){
Toast.makeText(RegisterActivity.this,"注册成功!",Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.putExtra("username",username);
intent.putExtra("password",password);
setResult(RESULT_OK,intent);
finish();
}else {
Toast.makeText(RegisterActivity.this,"注册失败!",Toast.LENGTH_SHORT).show();
}
}else {
Toast.makeText(RegisterActivity.this,"确认密码与密码不相同!",Toast.LENGTH_SHORT).show();
}
}
}else {
Toast.makeText(RegisterActivity.this,"用户名、密码、确认密码都不能为空!",Toast.LENGTH_SHORT).show();
}
}
});
}
}
2.4 用户管理
package com.example.homeworknine;
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class UserManageActivity extends AppCompatActivity {
private EditText editText;
private TextView textView;
private Button button1,button2;
private ListView listView;
private ArrayAdapter arrayAdapter;
private List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user_manage);
editText = findViewById(R.id.editText);
textView = findViewById(R.id.textView);
button1 = findViewById(R.id.button1);
button2 = findViewById(R.id.button2);
listView = findViewById(R.id.listView);
list = new ArrayList<>();
//添加按钮
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String username = editText.getText().toString();
//判断文本框内的输入内容是否为空
if (!TextUtils.isEmpty(username)){
MyHelper myHelper = new MyHelper(UserManageActivity.this,"information",null,1);
final SQLiteDatabase db = myHelper.getReadableDatabase();
final Cursor cursor1 = db.rawQuery("select * from user where username = ?",new String[]{username});
//判断用户是否存在,若不存在,弹出对话框,添加用户信息
if (cursor1.moveToNext()){
Toast.makeText(UserManageActivity.this,"此用户已存在!",Toast.LENGTH_SHORT).show();
}else {
final AlertDialog.Builder builder = new AlertDialog.Builder(UserManageActivity.this);
//为对话框设置自定义的布局
final View view = View.inflate(UserManageActivity.this,R.layout.edit_user,null);
builder.setTitle("添加用户信息");
builder.setView(view);
TextView textView = view.findViewById(R.id.textView);
final EditText editText1 = view.findViewById(R.id.editText1);
final EditText editText2 = view.findViewById(R.id.editText2);
final EditText editText3 = view.findViewById(R.id.editText3);
//用户名设置为编辑框输入的内容
textView.setText(username);
builder.setPositiveButton("确定", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = editText1.getText().toString();
String phone = editText2.getText().toString();
String address = editText3.getText().toString();
//判断密码是否为空,电话、地址可以为空。
if (!TextUtils.isEmpty(password)){
db.execSQL("insert into user values(null,?,?,?,?)",new String[]{username,password,phone,address});
Cursor cursor2 = db.rawQuery("select * from user where username = ?",new String[]{username});
//判断是否添加成功
if (cursor2.moveToNext()){
Toast.makeText(UserManageActivity.this,"用户添加成功!",Toast.LENGTH_SHORT).show();
closeDialog(dialog,true);
}else {
Toast.makeText(UserManageActivity.this,"用户添加失败!",Toast.LENGTH_SHORT).show();
closeDialog(dialog,false);
}
}else {
Toast.makeText(UserManageActivity.this,"密码不能为空!",Toast.LENGTH_SHORT).show();
closeDialog(dialog,false);
}
}
});
builder.setNegativeButton("取消",null);
//显示对话框
builder.create().show();
}
}else {
Toast.makeText(UserManageActivity.this,"输入内容不能为空!",Toast.LENGTH_SHORT).show();
}
}
});
//查询按钮
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//每次进行新的查询时,要将list的内容先清空
list.clear();
String text = editText.getText().toString();
//判断文本框内的输入内容是否为空
if (!TextUtils.isEmpty(text)){
MyHelper myHelper = new MyHelper(UserManageActivity.this,"information",null,1);
SQLiteDatabase db = myHelper.getReadableDatabase();
//模糊查询
Cursor cursor = db.rawQuery("select * from user where username like ?",new String[]{"%"+text+"%"});
//将查询到的用户名添加到list中
while (cursor.moveToNext()){
list.add(cursor.getString(1));
}
//新建适配器
arrayAdapter = new ArrayAdapter(UserManageActivity.this,android.R.layout.simple_list_item_1,list);
//刷新
arrayAdapter.notifyDataSetChanged();
listView.setAdapter(arrayAdapter);
//当listView的内容为空时,显示提示信息
listView.setEmptyView(textView);
}else {
Toast.makeText(UserManageActivity.this,"输入内容不能为空!",Toast.LENGTH_SHORT).show();
}
}
});
//点击listView的每一项时,弹出编辑用户信息的对话框
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
//得到被点击的用户名
final String username = list.get(position);
MyHelper myHelper = new MyHelper(UserManageActivity.this,"information",null,1);
final SQLiteDatabase db = myHelper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from user where username = ?",new String[]{username});
final AlertDialog.Builder builder = new AlertDialog.Builder(UserManageActivity.this);
//为对话框设置自定义的布局
final View view = View.inflate(UserManageActivity.this,R.layout.edit_user,null);
builder.setTitle("编辑用户信息");
builder.setView(view);
TextView textView = view.findViewById(R.id.textView);
final EditText editText1 = view.findViewById(R.id.editText1);
final EditText editText2 = view.findViewById(R.id.editText2);
final EditText editText3 = view.findViewById(R.id.editText3);
textView.setText(username);
//将数据库查询到的用户信息,填充在文本框里
while (cursor.moveToNext()){
editText1.setText(cursor.getString(2));
editText2.setText(cursor.getString(3));
editText3.setText(cursor.getString(4));
}
//点击确定更新数据
builder.setPositiveButton("确定", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String password = editText1.getText().toString();
String phone = editText2.getText().toString();
String address = editText3.getText().toString();
//判断密码是否为空,地址、电话可以为空
if(!TextUtils.isEmpty(password)){
//更新数据库
db.execSQL("update user set password = ?, phone = ?, address = ? where username = ?",new String[]{password,phone,address,username});
closeDialog(dialog,true);
}else {
Toast.makeText(UserManageActivity.this, "密码不能为空!", Toast.LENGTH_SHORT).show();
closeDialog(dialog,false);
}
}
});
builder.setNegativeButton("取消",null);
//显示对话框
builder.create().show();
}
});
//长点击listView的每一项时,弹出删除用户的对话框
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
//得到被点击的用户名
final String username = list.get(position);
new AlertDialog.Builder(UserManageActivity.this).setTitle("删除用户").setMessage("你确定要删除"+username+"吗?")
.setPositiveButton("确定", new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
MyHelper myHelper = new MyHelper(UserManageActivity.this,"information",null,1);
SQLiteDatabase db = myHelper.getReadableDatabase();
//删除用户
db.execSQL("delete from user where username = ?",new String[]{username});
//删除用户时,需要将用户名从list中移除
list.remove(username);
//刷新列表
arrayAdapter.notifyDataSetChanged();
}
})
.setNegativeButton("取消",null).create().show();
/*
因为android默认的优先响应ItemClickListener,所以当返回值为false时,
ItemLongClickListener和ItemClickListener都会响应点击事件,因此应该
返回true,提高ItemLongClickListener响应的优先级。
*/
return true;
}
});
}
//利用反射机制关闭对话框
public void closeDialog(DialogInterface dialog,boolean flag){
try {
Field field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
//当flag为true时关闭对话框,否则不关闭
field.set(dialog,flag);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.5 主界面布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView"
android:layout_width="127dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10sp"
android:layout_weight="1"
android:text="用户名"
android:textSize="25sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="264dp"
android:layout_height="wrap_content"
android:layout_marginRight="10sp"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="0dp"
android:layout_height="43dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout">
<TextView
android:id="@+id/textView2"
android:layout_width="68dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10sp"
android:layout_weight="1"
android:text="密码"
android:textSize="25sp" />
<EditText
android:id="@+id/editText2"
android:layout_width="273dp"
android:layout_height="match_parent"
android:layout_marginRight="10sp"
android:ems="10"
android:inputType="textPassword"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="385dp"
android:layout_height="46dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/checkBox">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5sp"
android:layout_weight="1"
android:text="登录"
android:textSize="20sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5sp"
android:layout_weight="1"
android:text="注册"
android:textSize="20sp" />
</LinearLayout>
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="40dp"
android:layout_marginLeft="40dp"
android:layout_marginTop="20dp"
android:text="记住我"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout2" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.6 注册界面布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".RegisterActivity">
<LinearLayout
android:id="@+id/linearLayout3"
android:layout_width="381dp"
android:layout_height="48dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="用户名"
android:textSize="25sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="279dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="386dp"
android:layout_height="40dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout3">
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="密码"
android:textSize="25sp" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPassword"
android:text=""
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout5"
android:layout_width="388dp"
android:layout_height="46dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout4">
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确认密码"
android:textSize="25sp" />
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPassword"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="394dp"
android:layout_height="51dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout5">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="5sp"
android:layout_weight="1"
android:text="返回"
android:textSize="20sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5sp"
android:layout_weight="1"
android:text="注册"
android:textSize="20sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
2.7 用户管理界面布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UserManageActivity">
<LinearLayout
android:id="@+id/linearLayout6"
android:layout_width="393dp"
android:layout_height="50dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="30dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="用户名"
android:textSize="25sp" />
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout7"
android:layout_width="406dp"
android:layout_height="49dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout6">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5sp"
android:layout_weight="1"
android:text="添加"
android:textSize="20sp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5sp"
android:layout_weight="1"
android:text="查询"
android:textSize="20sp" />
</LinearLayout>
<TextView
android:id="@+id/textView7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="查询结果"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout7" />
<ListView
android:id="@+id/listView"
android:layout_width="411dp"
android:layout_height="382dp"
android:layout_marginTop="30dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView7" />
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="没有用户!"
android:gravity="center"
android:textColor="@color/colorPrimary"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/listView" />
</androidx.constraintlayout.widget.ConstraintLayout>
2.8 自定义对话框布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/linearLayout9"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView">
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="密码"
android:textSize="25sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout10"
android:layout_width="0dp"
android:layout_height="45dp"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout9">
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="电话"
android:textSize="25sp" />
<EditText
android:id="@+id/editText2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:textSize="20sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout10">
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="地址"
android:textSize="25sp" />
<EditText
android:id="@+id/editText3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName"
android:textSize="20sp" />
</LinearLayout>
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="39dp"
android:layout_marginTop="30dp"
android:layout_weight="8"
android:gravity="center"
android:textColor="@color/colorAccent"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>