本项目是用软件编写,经过我的亲自实践,其真实有效,希望能给您有所帮助

项目版本:.1.1

AVD建议:.4.2及以上

源码资源下载链接:

图片资源下载(免费):

注册页面主要用于输入注册信息,在注册页面中用户需要输入用户名、密码、再次输入密码(确保密码输入无误),当点击“注册”按钮时进行注册。

效果图:

1.标题栏.xml

在res/文件夹中,创建一个.xml文件,采用布局。

代码如下:.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/title_bar"
    android:layout_width="match_parent"
    android:layout_height="50dp" 
    android:background="@android:color/transparent">
    
    <TextView
        android:id="@+id/tv_back"
        android:background="@drawable/go_back_selector"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv_main_title"
        android:textColor="@android:color/white"
        android:textSize="20sp"
        android:text="@string/boxuegu"
        android:layout_centerInParent="true"/>
</RelativeLayout>

2.创建背景选择器

(1)返回按钮背景选择器

将图片.png、.png导入文件夹中。

在文件夹中,右击并选择“New”–“other”–“”–“ XML File”,创建一个背景选择器.xml,根据按钮按下和弹起的状态来切换它的背景图片,由此实现动态效果。

具体代码如下:.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item android:state_pressed="true" android:drawable="@drawable/iv_back_selected">
    </item>
    <item android:drawable="@drawable/iv_back"></item>
</selector>

(2)注册按钮背景选择器

将图片ed.png、.png导入文件夹中。

在文件夹中,右击并选择“New”–“other”–“”–“ XML File”,创建一个背景选择器.xml。具体代码如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item android:state_pressed="true" android:drawable="@drawable/register_inco_selected">
    </item>
    <item android:drawable="@drawable/register_icon_normal"></item>
</selector>

3.注册界面的布局文件

(1)导入图片

将注册界面所需图片.png、.png、.png、.png导入res/文件夹中

(2)创建注册界面的布局文件.xml。在res/文件夹中,右击并选择“New”–“other”–“”–“ XML File”。

具体代码如下:.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/activity_register"
    android:background="@drawable/register_bg"
    android:orientation="vertical" >
    
    <include layout="@layout/main_title_bar" />
    
    <ImageView
        android:layout_marginTop="25dp"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/default_icon"
        android:contentDescription="@null"
        android:layout_width="70dp"
        android:layout_height="70dp" />
    <EditText
        android:singleLine="true"
        android:id="@+id/et_user_name"
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:background="@drawable/register_psw"
        android:layout_marginTop="35dp"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:drawableLeft="@drawable/user_name_icon"
        android:paddingLeft="8dp"
        android:drawablePadding="10dp"
        android:hint="@string/name"
        android:gravity="center_vertical"
        android:textColorHint="#a3a3a3"
        android:textColor="#000000"
        android:textSize="14sp"/>
    <EditText
        android:singleLine="true"
        android:id="@+id/et_pwd"
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:background="@drawable/register_psw"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:drawableLeft="@drawable/psw_icon"
        android:paddingLeft="8dp"
        android:inputType="textPassword"
        android:drawablePadding="10dp"
        android:hint="@string/pwd"
        android:gravity="center_vertical"
        android:textColorHint="#a3a3a3"
        android:textColor="#000000"
        android:textSize="14sp"/>
    <EditText
        android:singleLine="true"
        android:id="@+id/et_pwd_again"
        android:layout_width="fill_parent"
        android:layout_height="48dp"
        android:background="@drawable/register_psw"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:drawableLeft="@drawable/psw_icon"
        android:paddingLeft="8dp"
        android:drawablePadding="10dp"
        android:inputType="textPassword"
        android:hint="@string/pwd_again"
        android:gravity="center_vertical"
        android:textColorHint="#a3a3a3"
        android:textColor="#000000"
        android:textSize="14sp"/>
    <Button
        android:text="@string/btn_register"
        android:id="@+id/btn_register"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="35dp"
        android:layout_marginRight="35dp"
        android:textColor="@android:color/white"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:background="@drawable/register_selector"/>
</LinearLayout>

文本信息在文件夹下的.xml文件里面:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">BoXueGu</string>
    <string name="hello_world">Hello world!</string>
    <string name="boxuegu">博学谷</string>
    <string name="name">请输入用户名</string>
    <string name="pwd">请输入密码</string>
    <string name="pwd_again">请再次输入密码</string>
    <string name="btn_register">注册</string>
    
</resources>

4.MD5加密算法

创建类:在src文件夹中,右击并选择“New”–“class”,创建.java文件,包名填china.ynyx..utils

设计用户注册页面_chatgpt 设计用户注册界面_登陆注册界面设计

MD5加密算法的具体代码如下:.java

package china.ynyx.heyunhui.utils;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
	 /**
     * md5加密的算法
     * @param text
     * @return
     */
	public static String MD5(String text){
		try {
            MessageDigest digest = MessageDigest.getInstance("md5");
            byte[] result = digest.digest(text.getBytes());
            StringBuffer sb=new StringBuffer();
            for (byte b:result){
                int number =b & 0xff;
                String hex=Integer.toHexString(number);
                if (hex.length()==1){//如果0xff为一个字节
                    sb.append("0"+hex);
                }else {
                    sb.append(hex);
                }
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return "";//如果发生异常
        }
	}
}

5.注册界面逻辑代码

新建类:在Java包china.ynyx..中,右击并选择“New”→“class”,创建.java文件

具体代码如下:.java

package china.ynyx.heyunhui.activity;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import china.ynyx.heyunhui.R;
import china.ynyx.heyunhui.utils.MD5Utils;
import china.ynyx.heyunhui.activity.RegisterActivity;
public class RegisterActivity extends AppCompatActivity {
	private TextView tv_main_title;//标题
    private TextView tv_back;		//返回按钮
    private RelativeLayout rl_title_bar;//标题布局
    private Button btn_register;	//注册按钮
    private EditText et_user_name,et_pwd,et_pwd_again;//用户名、密码、再次输入的密码的控件
    private String username,pwd,pwd_again;//用户名、密码、再次输入的密码的控件的获取值
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	// TODO Auto-generated method stub
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.activity_register);
        init();
    }
	private void init() {
		// TODO Auto-generated method stub
		//从main_title_bar.xml页面布局中获取对应的UI控件
        //抽取成员变量ctrl+alt+F
        tv_main_title = (TextView) findViewById(R.id.tv_main_title);
        tv_main_title.setText("注册");
        tv_back = ((TextView) findViewById(R.id.tv_back));
        rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);
        rl_title_bar.setBackgroundColor(Color.TRANSPARENT);
        //从activity_register.xml页面布局中获取对应的UI控件
        btn_register = (Button) findViewById(R.id.btn_register);
        et_user_name = (EditText) findViewById(R.id.et_user_name);
        et_pwd = (EditText) findViewById(R.id.et_pwd);
        et_pwd_again = (EditText) findViewById(R.id.et_pwd_again);
        tv_back.setOnClickListener(new View.OnClickListener() {
            @Override//关闭页面的点击事件
            public void onClick(View view) {//设置按钮可以关闭当前页面
                RegisterActivity.this.finish();
            }
        });
        //注册按钮点击事件
        btn_register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点击后获取输入在响应控件中的字符串
                getEditstring();
                //判断字符串是否为空
                if(TextUtils.isEmpty(username)){
                    Toast.makeText(RegisterActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show();
                    return;
                }else if (TextUtils.isEmpty(pwd)){
                    Toast.makeText(RegisterActivity.this, "请输入密码", Toast.LENGTH_SHORT).show();
                    return;
                }else if (TextUtils.isEmpty(pwd_again)){
                    Toast.makeText(RegisterActivity.this, "请再次输入密码", Toast.LENGTH_SHORT).show();
                    return;
                }else if (!pwd.equals(pwd_again)){
                    Toast.makeText(RegisterActivity.this, "两次输入的密码不一样", Toast.LENGTH_SHORT).show();
                    return;
                } else if (isExistUserName(username)){
                    Toast.makeText(RegisterActivity.this, "此用户已经存在", Toast.LENGTH_SHORT).show();
                    return;
                }else {
                    Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();
                    //把用户名和密码保存到SharedPreferences里面
                    saveRegisterInfo(username,pwd);
                    //注册成功后通过Intent把用户名传递到LoginActivity.java中
                    Intent data=new Intent();
                    data.putExtra("username",username);
                    setResult(RESULT_OK,data);//setResult为OK,关闭当前页面
                    RegisterActivity.this.finish();//在登录的时候,如果用户还没有注册则注册。注册成功后把注册成功后的用户名返回给前一个页面
                    }
            }
        });
    }
    private void saveRegisterInfo(String username, String pwd) {
        String md5Pwd= MD5Utils.MD5(pwd);//把密码用MD5加密
        //loginInfo是sp的文件名
        SharedPreferences sp=getSharedPreferences("loginInfo",MODE_PRIVATE);//通过getSharedPreferences传入loginInfo注册登录相关的信息
        SharedPreferences.Editor editor = sp.edit();//通过sp.edit()获取到sp的编辑器对象
        //username作为key,密码作为value
        editor.putString(username,md5Pwd);
        editor.commit();//提交修改
    }
    /**
     	* 从SharedPreferences中读取输入的用户名,判断SharedPreferences中是否有用户名
     */
    private boolean isExistUserName(String username) {
        boolean has_userName=false;//表示是否有用户名
        SharedPreferences sp=getSharedPreferences("loginInfo",MODE_PRIVATE);
        String spPwd = sp.getString(username,""); //通过sp.getString传值用户名获取到密码
        if (!TextUtils.isEmpty(spPwd)){ //判断这个密码是否为空
            has_userName=true;//该用户是否保存了这一个密码
        }
        return has_userName;
    }
    /**
               * 获取控件中的字符串
     */
    private void getEditstring() {
        username=et_user_name.getText().toString().trim();
        pwd = et_pwd.getText().toString();
        pwd_again = et_pwd_again.getText().toString().trim();
	}
}

6.清单文件.xml中注册

<activity android:name="china.ynyx.heyunhui.activity.RegisterActivity"></activity>

7.完善功能

欢迎界面跳转到注册界面:在欢迎界面.java文件中修改跳转代码

Intent intent=new Intent(SplashActivity.this,MainActivity.class);

改为

Intent intent=new Intent(SplashActivity.this,RegisterActivity.class);

参考资料:《项目实战——博学谷》(黑马程序员著)

基于的项目实战—博学谷(一)欢迎界面

基于的项目实战—博学谷(二)注册界面

基于的项目实战—博学谷(三)登录界面

基于的项目实战—博学谷(四)底部导航栏

基于的项目实战—博学谷(五)“我”的模块

基于的项目实战—博学谷(六)设置界面

基于的项目实战—博学谷(七)修改密码

基于的项目实战—博学谷(八)设置密保和找回密码

基于的项目实战—博学谷(九)个人资料界面

基于的项目实战—博学谷(十)个人资料修改

基于的项目实战—博学谷(十 一)习题界面

基于的项目实战—博学谷(十 二)习题详情界面

基于的项目实战—博学谷(十 三)水平滑动广告栏界面

基于的项目实战—博学谷(十 四)课程界面

基于的项目实战—博学谷(十 五)课程详情界面

基于的项目实战—博学谷(十 六)视频播放界面

基于的项目实战—博学谷(十 七)播放记录界面

基于的项目实战—博学谷(十 八)播放不同视频(网络视频)

基于的项目实战—博学谷(十 九)播放不同视频(本地视频)