Android开发实战——登录注册页面(附源码)

这篇具有很好参考价值的文章主要介绍了Android开发实战——登录注册页面(附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android安卓实战项目---登陆注册页面(源码在文末🐕🐕🐕)

一.项目运行介绍

效果图:

Android开发实战——登录注册页面(附源码)

Android开发实战——登录注册页面(附源码)

二.具体实现

LoginActivity.java
LoginActivity.java
package com.example.login;
​
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
​
import androidx.appcompat.app.AppCompatActivity;
​
import com.example.angel.GuideActivity;
import com.example.angel.R;
​
import org.jetbrains.annotations.Nullable;
​
public class LoginActivity extends AppCompatActivity {
​
    private static final String TAG = "tag";
    public static final int REQUEST_CODE_REGISTER = 1;
    private Button btnLogin;
    private EditText etAccount,etPassword;
    private CheckBox cbRemember,cbAutoLogin;
​
    private String userName = "fxjzzyo";
    private String pass = "123";
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        getSupportActionBar().setTitle("登录");
​
        initView();
        initData();
​
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String account = etAccount.getText().toString();
                String password = etPassword.getText().toString();
​
                Log.d(TAG, "onClick: -------------" + account);
                Log.d(TAG, "password: -------------" + password);
                if (TextUtils.isEmpty(userName)) {
                    Toast.makeText(LoginActivity.this, "还没有注册账号!", Toast.LENGTH_LONG).show();
                    return;
                }
​
                if (TextUtils.equals(account, userName)) {
                    if (TextUtils.equals(password, pass)) {
​
                        Toast.makeText(LoginActivity.this, "恭喜你,登录成功!", Toast.LENGTH_LONG).show();
                        if (cbRemember.isChecked()) {
                            SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);
                            SharedPreferences.Editor edit = spf.edit();
                            edit.putString("account", account);
                            edit.putString("password", password);
                            edit.putBoolean("isRemember", true);
                            if (cbAutoLogin.isChecked()) {
                                edit.putBoolean("isLogin", true);
                            }else {
                                edit.putBoolean("isLogin", false);
                            }
                            edit.apply();
​
                        }else {
                            SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);
                            SharedPreferences.Editor edit = spf.edit();
                            edit.putBoolean("isRemember", false);
                            edit.apply();
                        }
​
                        Intent intent = new Intent(LoginActivity.this, GuideActivity.class);
                        intent.putExtra("account", account);
                        startActivity(intent);
                        LoginActivity.this.finish();
​
                    } else {
                        Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_LONG).show();
                    }
                } else {
                    Toast.makeText(LoginActivity.this, "用户名错误!", Toast.LENGTH_LONG).show();
                }
​
            }
        });
​
        cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    cbRemember.setChecked(true);
                }
            }
        });
​
        cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (!isChecked) {
                    cbAutoLogin.setChecked(false);
                }
            }
        });
​
    }
​
​
​
    private void initView() {
        btnLogin = findViewById(R.id.btn_login);
        etAccount = findViewById(R.id.et_account);
        etPassword = findViewById(R.id.et_password);
        cbRemember = findViewById(R.id.cb_remember);
        cbAutoLogin = findViewById(R.id.cb_auto_login);
​
    }
​
    private void initData() {
        SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);
        boolean isRemember = spf.getBoolean("isRemember", false);
        boolean isLogin = spf.getBoolean("isLogin", false);
        String account = spf.getString("account", "");
        String password = spf.getString("password", "");
​
​
        if (isLogin) {
            Intent intent = new Intent(LoginActivity.this, GuideActivity.class);
            intent.putExtra("account", account);
            startActivity(intent);
            LoginActivity.this.finish();
        }
​
​
        userName = account;
        pass = password;
​
        if (isRemember) {
            etAccount.setText(account);
            etPassword.setText(password);
            cbRemember.setChecked(true);
        }
​
​
    }
​
    public void toRegister(View view) {
        Intent intent = new Intent(this, RegisterActivity.class);
​
        startActivityForResult(intent, REQUEST_CODE_REGISTER);
    }
​
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_REGISTER && resultCode == RegisterActivity.RESULT_CODE_REGISTER && data != null) {
            Bundle extras = data.getExtras();
​
            String account = extras.getString("account", "");
            String password = extras.getString("password", "");
​
            etAccount.setText(account);
            etPassword.setText(password);
​
            userName = account;
            pass = password;
        }
    }
}

这段代码是一个简单的Android应用中的登录功能代码,下面逐行解释其功能和作用:

  1. 导入相关的类和包:

package com.example.userprofile23_1;
​
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
​
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

这些导入语句引入了用于构建Android应用界面、处理用户交互和数据存储的必要类和包。

  1. 定义一个名为LoginActivity的类,它继承自AppCompatActivity,表示这是一个用于处理界面的活动(Activity)。

public class LoginActivity extends AppCompatActivity {
  1. 声明类中需要用到的一些变量和常量:

private static final String TAG = "tag";
public static final int REQUEST_CODE_REGISTER = 1;
private Button btnLogin;
private EditText etAccount, etPassword;
private CheckBox cbRemember, cbAutoLogin;
private String userName = "fxjzzyo";
private String pass = "123";
  • TAG:用于在日志中标记的标签。

  • REQUEST_CODE_REGISTER:用于在startActivityForResult中标识注册活动的请求代码。

  • btnLogin:登录按钮。

  • etAccountetPassword:输入用户名和密码的文本框。

  • cbRemembercbAutoLogin:复选框,分别表示是否记住密码和是否自动登录。

  • userNamepass:默认的用户名和密码。

  1. onCreate方法中初始化界面元素和处理点击事件:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    getSupportActionBar().setTitle("登录");
​
    initView();
    initData();
​
    // ... 省略了部分代码
​
    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // ... 处理登录逻辑
        }
    });
​
    cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // ... 处理自动登录复选框状态改变的逻辑
        }
    });
​
    cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // ... 处理记住密码复选框状态改变的逻辑
        }
    });
}
  1. initView() 方法用于初始化界面元素,将 XML 布局中的控件与变量关联起来:

private void initView() {
    btnLogin = findViewById(R.id.btn_login);
    etAccount = findViewById(R.id.et_account);
    etPassword = findViewById(R.id.et_password);
    cbRemember = findViewById(R.id.cb_remember);
    cbAutoLogin = findViewById(R.id.cb_auto_login);
}
  1. initData() 方法用于初始化数据,根据用户的记住密码和自动登录的设置,更新界面元素和变量的状态:

private void initData() {
    SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);
    boolean isRemember = spf.getBoolean("isRemember", false);
    boolean isLogin = spf.getBoolean("isLogin", false);
    String account = spf.getString("account", "");
    String password = spf.getString("password", "");
​
    // ... 处理自动登录逻辑
​
    userName = account;
    pass = password;
​
    if (isRemember) {
        etAccount.setText(account);
        etPassword.setText(password);
        cbRemember.setChecked(true);
    }
}
  1. btnLogin 按钮的点击事件处理,用于验证用户输入的用户名和密码是否匹配,并根据复选框的状态更新数据到SharedPreferences中:

btnLogin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 获取用户输入的用户名和密码
        String account = etAccount.getText().toString();
        String password = etPassword.getText().toString();
​
        if (TextUtils.isEmpty(userName)) {
            // 用户未注册
            Toast.makeText(LoginActivity.this, "还没有注册账号!", Toast.LENGTH_LONG).show();
            return;
        }
​
        if (TextUtils.equals(account, userName)) {
            if (TextUtils.equals(password, pass)) {
                // 登录成功
                // ... 处理登录成功逻辑
            } else {
                // 密码错误
                Toast.makeText(LoginActivity.this, "密码错误!", Toast.LENGTH_LONG).show();
            }
        } else {
            // 用户名错误
            Toast.makeText(LoginActivity.this, "用户名错误!", Toast.LENGTH_LONG).show();
        }
    }
});
  1. cbAutoLogincbRemember 复选框状态改变的监听器,确保自动登录时同时记住密码,取消记住密码时取消自动登录:

cbAutoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            cbRemember.setChecked(true);
        }
    }
});
​
cbRemember.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (!isChecked) {
            cbAutoLogin.setChecked(false);
        }
    }
});
  1. toRegister(View view) 方法处理前往注册界面的按钮点击事件,启动RegisterActivity来进行用户注册:

public void toRegister(View view) {
    Intent intent = new Intent(this, RegisterActivity.class);
    startActivityForResult(intent, REQUEST_CODE_REGISTER);
}
  1. onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 方法处理从注册界面返回的结果,获取注册的用户名和密码,并更新界面元素和数据:

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_REGISTER && resultCode == RegisterActivity.RESULT_CODE_REGISTER && data != null) {
        Bundle extras = data.getExtras();
        String account = extras.getString("account", "");
        String password = extras.getString("password", "");
​
        etAccount.setText(account);
        etPassword.setText(password);
​
        userName = account;
        pass = password;
    }
}

这段代码实现了一个简单的登录功能,包括记住密码、自动登录、用户名和密码验证等

RegisterActivity.Java
package com.example.login;
​
import android.content.Intent;
import android.content.SharedPreferences;
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;
​
import androidx.appcompat.app.AppCompatActivity;
​
import com.example.angel.R;
​
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
​
    public static final int RESULT_CODE_REGISTER = 0;
    private Button btnRegister;
    private EditText etAccount,etPass,etPassConfirm;
    private CheckBox cbAgree;
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        getSupportActionBar().setTitle("注册");
​
        etAccount = findViewById(R.id.et_account);
        etPass = findViewById(R.id.et_password);
        etPassConfirm = findViewById(R.id.et_password_confirm);
        cbAgree = findViewById(R.id.cb_agree);
        btnRegister = findViewById(R.id.btn_register);
​
        btnRegister.setOnClickListener(this);
​
    }
​
    @Override
    public void onClick(View v) {
        String name = etAccount.getText().toString();
        String pass = etPass.getText().toString();
        String passConfirm = etPassConfirm.getText().toString();
​
        if (TextUtils.isEmpty(name)) {
            Toast.makeText(RegisterActivity.this, "用户名不能为空", Toast.LENGTH_LONG).show();
​
            return;
        }
​
        if (TextUtils.isEmpty(pass)) {
            Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_LONG).show();
            return;
        }
​
        if (!TextUtils.equals(pass,passConfirm)) {
            Toast.makeText(RegisterActivity.this, "密码不一致", Toast.LENGTH_LONG).show();
            return;
        }
​
        if (!cbAgree.isChecked()) {
            Toast.makeText(RegisterActivity.this, "请同意用户协议", Toast.LENGTH_LONG).show();
            return;
        }
​
        // 存储注册的用户名 密码
        SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);
        SharedPreferences.Editor edit = spf.edit();
        edit.putString("account", name);
        edit.putString("password", pass);
        edit.apply();
​
        // 数据回传
        Intent intent = new Intent();
        Bundle bundle = new Bundle();
        bundle.putString("account",name);
        bundle.putString("password",pass);
        intent.putExtras(bundle);
        setResult(RESULT_CODE_REGISTER,intent);
​
​
        Toast.makeText(RegisterActivity.this, "注册成功!", Toast.LENGTH_LONG).show();
        this.finish();
    }
}

这段代码是一个用于注册用户的 Android 应用程序的一部分。我会逐行解释每个部分的作用和功能。

  1. 导入所需的类和包:

package com.example.userprofile23_1;
​
import android.content.Intent;
import android.content.SharedPreferences;
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;
​
import androidx.appcompat.app.AppCompatActivity;

在这个部分,代码导入了所需的 Android 类和包,以便后续使用。这些包括处理界面元素(如 EditText、Button、CheckBox)、处理数据存储(SharedPreferences)以及处理界面操作(AppCompatActivity)等。

  1. 创建 RegisterActivity 类:

public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {

这段代码定义了一个名为 RegisterActivity 的类,该类继承自 AppCompatActivity 类,并实现了 View.OnClickListener 接口。这意味着该类可以作为一个活动(Activity)来运行,并且可以响应视图上的点击事件。

  1. 声明变量和常量:

public static final int RESULT_CODE_REGISTER = 0;
private Button btnRegister;
private EditText etAccount, etPass, etPassConfirm;
private CheckBox cbAgree;

这部分声明了一些变量和常量,用于处理注册界面中的各个组件。其中:

  • RESULT_CODE_REGISTER 是一个常量,用于表示注册操作的结果代码。

  • btnRegister 是一个 Button 对象,代表注册按钮。

  • etAccountetPassetPassConfirm 分别是三个 EditText 对象,分别用于输入用户名、密码和确认密码。

  • cbAgree 是一个 CheckBox 对象,用于表示用户是否同意用户协议。

  1. 在 onCreate 方法中进行初始化:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    getSupportActionBar().setTitle("注册");
​
    etAccount = findViewById(R.id.et_account);
    etPass = findViewById(R.id.et_password);
    etPassConfirm = findViewById(R.id.et_password_confirm);
    cbAgree = findViewById(R.id.cb_agree);
    btnRegister = findViewById(R.id.btn_register);
​
    btnRegister.setOnClickListener(this);
}

在这部分代码中,onCreate 方法是 Android 活动的一个生命周期方法,用于在活动创建时进行初始化操作。具体的初始化步骤包括:

  • 设置活动的布局为 "activity_register",即注册界面的布局。

  • 设置活动的标题为 "注册"。

  • 获取用户名、密码、确认密码和同意协议的 EditText 和 CheckBox 对象。

  • 获取注册按钮,并设置点击监听器为当前活动(实现了 View.OnClickListener 接口)。

  1. 实现 onClick 方法:

@Override
public void onClick(View v) {
    String name = etAccount.getText().toString();
    String pass = etPass.getText().toString();
    String passConfirm = etPassConfirm.getText().toString();
​
    if (TextUtils.isEmpty(name)) {
        Toast.makeText(RegisterActivity.this, "用户名不能为空", Toast.LENGTH_LONG).show();
        return;
    }
​
    if (TextUtils.isEmpty(pass)) {
        Toast.makeText(RegisterActivity.this, "密码不能为空", Toast.LENGTH_LONG).show();
        return;
    }
​
    if (!TextUtils.equals(pass, passConfirm)) {
        Toast.makeText(RegisterActivity.this, "密码不一致", Toast.LENGTH_LONG).show();
        return;
    }
​
    if (!cbAgree.isChecked()) {
        Toast.makeText(RegisterActivity.this, "请同意用户协议", Toast.LENGTH_LONG).show();
        return;
    }
​
    SharedPreferences spf = getSharedPreferences("spfRecord", MODE_PRIVATE);
    SharedPreferences.Editor edit = spf.edit();
    edit.putString("account", name);
    edit.putString("password", pass);
    edit.apply();
​
    Intent intent = new Intent();
    Bundle bundle = new Bundle();
    bundle.putString("account", name);
    bundle.putString("password", pass);
    intent.putExtras(bundle);
    setResult(RESULT_CODE_REGISTER, intent);
​
    Toast.makeText(RegisterActivity.this, "注册成功!", Toast.LENGTH_LONG).show();
    this.finish();
}

这部分代码实现了在按钮点击事件中执行的操作,主要包括:

  • 获取用户名、密码和确认密码的字符串。

  • 检查用户名、密码是否为空,以及确认密码是否与密码一致,以及是否勾选了用户协议的 CheckBox。

  • 如果输入有误,通过 Toast 显示相应的错误消息,并返回。

  • 如果输入正确,使用 SharedPreferences 对象存储用户名和密码。

  • 创建一个 Intent,将用户名和密码作为额外数据存入 Bundle 中,并将 Bundle 放入 Intent 中。

  • 使用 setResult 方法设置活动的返回结果为注册成功,并将 Intent 传递给上一个活动。

  • 通过 Toast 显示注册成功的消息,并关闭当前活动。

总之,这段代码实现了一个简单的用户注册界面,用户需要输入用户名、密码、确认密码,勾选用户协议后,点击注册按钮即可完成注册。注册成功后,用户名和密码会被保存,并传递给调用该界面的上一个活动。如果有任何输入错误或未勾选用户协议,会通过 Toast 提示用户相应的错误信息。

ic_login_background.png

Android开发实战——登录注册页面(附源码)

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.example.login.LoginActivity"
    android:background="@drawable/ic_login_background">
​
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="40dp"
        android:gravity="center_vertical"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="账号:"
            android:textSize="25sp"
​
            />
​
        <EditText
            android:id="@+id/et_account"
            android:layout_width="match_parent"
            android:hint="请输入用户名或手机号"
            android:layout_marginLeft="10dp"
            style="@style/MyEditStyle"
            android:inputType="text"
            />
    </LinearLayout>
​
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:gravity="center_vertical"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"
            android:textSize="25sp"
​
            />
​
        <EditText
            android:id="@+id/et_password"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:hint="请输入密码"
            android:textSize="18sp"
            android:layout_marginLeft="10dp"
            android:paddingLeft="5dp"
            android:inputType="numberPassword"
            android:background="@drawable/edit_text_bg"
            />
    </LinearLayout>
​
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        >
​
        <CheckBox
            android:id="@+id/cb_remember"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="记住密码"
            />
​
        <CheckBox
            android:id="@+id/cb_auto_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="40dp"
            android:text="自动登录"
            android:visibility="visible" />
​
    </LinearLayout>
​
    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"
        style="@style/MyBtnStyle"
        />
​
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/colorPrimary"
        android:text="还没有账号?"
        android:layout_gravity="right"
        android:layout_marginRight="20dp"
        android:layout_marginTop="10dp"
        android:onClick="toRegister"
        />
​
​
​
</LinearLayout>

activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.example.login.RegisterActivity">
​
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="40dp"
        android:layout_marginRight="20dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">
​
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="账&#12288;&#12288;号:"
            android:textSize="25sp" />
​
        <EditText
            android:id="@+id/et_account"
            style="@style/MyEditStyle"
            android:layout_width="match_parent"
            android:layout_marginLeft="10dp"
            android:hint="请输入用户名或手机号"
            android:inputType="text" />
    </LinearLayout>
​
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">
​
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密&#12288;&#12288;码:"
            android:textSize="25sp"
            />
​
        <EditText
            android:id="@+id/et_password"
            style="@style/MyEditStyle"
            android:layout_width="match_parent"
            android:layout_marginLeft="10dp"
            android:hint="请输入密码"
            android:inputType="numberPassword" />
    </LinearLayout>
​
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginRight="20dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">
​
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="确认密码:"
            android:textSize="25sp"
​
            />
​
        <EditText
            android:id="@+id/et_password_confirm"
            style="@style/MyEditStyle"
            android:layout_width="match_parent"
            android:layout_marginLeft="10dp"
            android:hint="再次输入密码"
            android:inputType="numberPassword" />
    </LinearLayout>
​
    <Button
        android:id="@+id/btn_register"
        style="@style/MyBtnStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册" />
​
    <CheckBox
        android:id="@+id/cb_agree"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:text="勾选即同意用户协议"
        android:textColor="@color/colorPrimary" />
​
​
</LinearLayout>

三.项目源码

链接:百度网盘 请输入提取码** 提取码:jynl

创作不易(可做实验报告,代码讲解等)

请私信作者或

(v)15135757306文章来源地址https://www.toymoban.com/news/detail-505158.html

到了这里,关于Android开发实战——登录注册页面(附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android开发 登录注册设计

    用Android Studio 简单的实现登录注册 目录 一、登录界面 activity_login.xml 布局代码: login.java 代码:  二、注册界面  activity_register.xml布局代码: register.java 代码: 三、修改密码(忘记密码 ?) activity_update_password.xml布局代码: UpdatePassword.java 代码: 四、SQLite 与 SharedPreferences 

    2024年02月08日
    浏览(43)
  • IDEA Android用户登录页面、登录验证、页面跳转演示示例全部源码

    开发工具: IDEA 2022.3.2,未连接数据库。验证用的用户名和密码为内置硬编码 演示程序运行效果:     设计器中的用户登录页面布局:  登录验证容错提示如下: 1,用户名不能为空: 2,密码不能为空:     3,用户名不存在: 4,用户密码错误    5,登录验证成功跳转到用户

    2024年02月11日
    浏览(52)
  • 【Android 记事本,笔记本,可注册登录,增删改查(附源码)】

    简介 用Sqlite做数据库,用来存储账号以及笔记信息,实现了账号的注册以及登录功能,笔记方面实现了新增、删除、修改、搜索功能,列表展示笔记使用的是listView(懒得弄分割线,就使用listView的默认分割线了); 运行效果 代码讲解 我代码里使用了两个依赖,一个是工具

    2024年02月04日
    浏览(47)
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(登录注册页面,验证码)

    系列内容 参考链接 基于 Vue3.x + Vant UI 的多功能记账本(一) 项目演示,涉及知识点 基于 Vue3.x + Vant UI 的多功能记账本(二) 搭建开发环境 基于 Vue3.x + Vant UI 的多功能记账本(三) 开发导航栏及公共部分 项目演示 Vue3 + Vant UI_多功能记账本 1、登录注册页面 页面设计,页面

    2024年02月03日
    浏览(76)
  • HarmonyOS应用开发实战—登录页面【ArkTS】

    HarmonyOS(鸿蒙操作系统)是华为公司推出的一种分布式操作系统。它被设计为一种全场景、全连接的操作系统,旨在实现在各种设备之间的无缝协同和共享,包括智能手机、

    2024年02月05日
    浏览(52)
  • 【Android应用开发之前端——简易App登录页面】

    各家App的登录页面大同小异,要么是用户名和密码组合登录,要么是手机号和验证码组合登录。如果要做的更好一点,就要提供忘记密码与记住密码等功能。我们的App登录项目把这些功能综合一下,都呈现到页面上。先将效果图奉上: 使用密码登录: 使用验证码登录: 修改

    2024年02月09日
    浏览(39)
  • 【安卓app开发一】Android Studio + Bmob后端云实现注册&登录账号、密码找回、意见反馈及数据可视化

    目录 前言 概览 Bmob后端云介绍 Bmob后端云与Android Studio配置 一、Bmob后端云  二、Android Studio配置 工具类 一、User类 二、Suit类 三、Code类 实现类  一、登录代码  二、注册代码  三、找回密码代码  四、想法反馈代码         本项目尚在开发阶段,主要针对的是安卓用户,通

    2024年02月08日
    浏览(59)
  • web登录注册页面

    目录 web登录注册页面 效果图 结构图 Java代码 User.java UserMapper.java IndexServlet.java RegisterServlet.java DButil.java xml配置文件 mybatis-config.xml db.properties web.xml html与css index.jsp index.css register.html register.css 文章目录 web登录注册页面 效果图 结构图 Java代码 User.java UserMapper.java IndexServlet.jav

    2024年02月08日
    浏览(76)
  • 登录注册页面连接数据库并完成注册(一)

    1:我们先从html开始,注释不多,希望谅解,下面是html页面的代码: 2:下面是一个css代码,可能比较乱: 3:然后我们看看样式是什么样子吧:  4:因为登录注册是在一个页面上面显示的,点击登录会把登录这个div页面隐藏,然后显示注册的div页面.利用的是点击事件;剩下的请看第二章哦!!!  

    2024年02月11日
    浏览(47)
  • HTML实现简单注册登录页面

    以下两个页面均只用HTML实现(其中注册若要添加号码与后面的登录密码判断,涉及到javascript的内容,本文只使用了html,后续会加上这些内容) 简单注册:(读者可以自行增加图片以及其他属性) 登录:    

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包