希望大家能给我提出一些建议,欢迎多多交流。如果各位看官很满意,求赏一个👍,不胜感激!

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>

源码下载

Logo

快速构建 Web 应用程序

更多推荐