今天的工作是实现了注册登录功能。
根据逻辑,启动app时就运行,只有成功登录才跳入主界面,但支持注册功能,注册成功则可登录。
首先创建LoginActivity,登录应该由数据库中存储的用户名密码实现,但数据库还未编写,这里则提前设置账号密码,只为实现简单的登录功能。
这是Login前台的代码实现,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:gravity="center_horizontal" android:orientation="vertical" tools:context=".activity.LoginActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#2196F3" android:orientation="horizontal"> <ImageView android:id="@+id/imageView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:srcCompat="@drawable/default_user_logo" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:layout_marginTop="50dp" android:orientation="vertical"> <TextView android:id="@+id/textView2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="用户昵称:" /> <EditText android:id="@+id/editTextName" android:layout_width="match_parent" android:layout_height="58dp" android:ems="10" android:inputType="textPersonName" android:text="" /> <TextView android:id="@+id/textViewPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="密码:" /> <EditText android:id="@+id/editTextPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:inputType="textPassword" android:text="" /> <Button android:id="@+id/buttonLogin" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dp" android:layout_marginRight="5dp"> <TextView android:id="@+id/textView3" android:layout_height="wrap_content" android:layout_width="0dp" android:layout_weight="1" android:text="" /> <TextView android:id="@+id/textViewRegister" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="end" android:text="@string/login_register" android:textColor="@color/colorPrimaryDark" /> </LinearLayout> </LinearLayout>
效果如下:
需要为注册用户添加调转的事件监听器到RegisterActivity去注册用户,在该Activity中编写跳转代码即可,如下:
package com.example.thorineaccount.activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.example.thorineaccount.MainActivity; import com.example.thorineaccount.R; /** * A login screen that offers login via email/password. */ public class LoginActivity extends AppCompatActivity { Button btnLogin; EditText editTextName,editTextPwd; TextView textViewRegister; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); btnLogin=(Button) this.findViewById(R.id.buttonLogin); editTextName=(EditText)this.findViewById(R.id.editTextName); editTextPwd=(EditText)this.findViewById(R.id.editTextPassword); textViewRegister=(TextView)this.findViewById(R.id.textViewRegister); btnLogin.setOnClickListener(new View.OnClickListener() {//实现登录功能 @Override public void onClick(View view) { login(); } }); textViewRegister.setOnClickListener(new View.OnClickListener() {//实现注册功能 @Override public void onClick(View view) { register(); } }); } private void register()//跳转到注册页面 { Intent intent=new Intent(); intent.setClass(this,RegisterActivity.class); startActivity(intent); } private void login()//登录校准 { String name=editTextName.getText().toString(); String pwd=editTextPwd.getText().toString(); if(name.equals("admin") && pwd.equals("admin")) { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); } else { Toast.makeText(this,"登录失败!",Toast.LENGTH_LONG).show(); } } }
下面首先是注册页面的布局代码,activity_register.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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:layout_margin="5dp" tools:context=".activity.RegisterActivity"> <ImageView android:id="@+id/imageView4" android:layout_width="match_parent" android:layout_height="120dp" app:srcCompat="@drawable/user_reg" /> <TextView android:id="@+id/textViewName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/imageView4" android:layout_marginTop="10dp" android:text="昵称:" android:layout_alignParentLeft="true" android:layout_marginLeft="35dp" /> <EditText android:id="@+id/editTextName" android:layout_width="334dp" android:layout_height="wrap_content" android:layout_below="@+id/textViewName" android:layout_marginStart="35dp" android:layout_marginTop="10dp" android:layout_marginEnd="35dp" android:ems="10" android:inputType="textPersonName" android:text="Dear" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" /> <TextView android:id="@+id/textViewPassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editTextName" android:layout_marginTop="10dp" android:text="密码:" android:layout_alignParentLeft="true" android:layout_marginLeft="35dp" /> <EditText android:id="@+id/editTextPassword" android:layout_width="334dp" android:layout_height="wrap_content" android:layout_below="@+id/textViewPassword" android:layout_marginStart="35dp" android:layout_marginEnd="35dp" android:layout_marginBottom="10dp" android:ems="10" android:inputType="numberPassword" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" /> <TextView android:id="@+id/textViewPassword2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editTextPassword" android:layout_marginTop="10dp" android:text="确认密码:" android:layout_alignParentLeft="true" android:layout_marginLeft="35dp" /> <EditText android:id="@+id/editTextPassword2" android:layout_width="332dp" android:layout_height="wrap_content" android:layout_below="@+id/textViewPassword2" android:layout_marginStart="35dp" android:layout_marginTop="10dp" android:layout_marginEnd="35dp" android:ems="10" android:inputType="numberPassword" android:layout_alignParentRight="true" /> <TextView android:id="@+id/textViewPrompt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/editTextPassword2" android:layout_marginTop="10dp" android:text="密码提示:" android:layout_marginLeft="35dp" /> <EditText android:id="@+id/editTextPrompt" android:layout_width="324dp" android:layout_height="wrap_content" android:layout_below="@+id/textViewPrompt" android:layout_marginStart="35dp" android:layout_marginTop="10dp" android:layout_marginEnd="35dp" android:ems="10" android:inputType="textPersonName" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" /> <Button android:id="@+id/buttonRegister" android:layout_width="200dp" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:layout_centerInParent="true" android:background="@drawable/login_button_shape" android:text="注册" /> </RelativeLayout>
界面样式如下:
然后是注册的逻辑结构:
package com.example.thorineaccount.activity; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import com.example.thorineaccount.R; public class RegisterActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); Button buttonRegister = (Button)findViewById(R.id.buttonRegister); buttonRegister.setOnClickListener(new View.OnClickListener() {//注册按钮的点击事件 @Override public void onClick(View v) { register(); } }); } private void register(){ EditText editTextName = (EditText)findViewById(R.id.editTextName); EditText editTextPassword = (EditText)findViewById(R.id.editTextPassword); EditText editTextPassword2 = (EditText)findViewById(R.id.editTextPassword2); EditText editTextPrompt = (EditText) findViewById(R.id.editTextPrompt); String name = editTextName.getText().toString(); if(name.length()<1) { Toast.makeText(this,"昵称不能为空",Toast.LENGTH_SHORT).show(); return; } String pwd = editTextPassword.getText().toString(); String pwd2 = editTextPassword2.getText().toString(); if (pwd.length() < 1){ Toast.makeText(this,"密码不能为空.",Toast.LENGTH_LONG).show(); return; } if (!pwd.equals(pwd2)){ Toast.makeText(this,"两次密码不相同.",Toast.LENGTH_LONG).show(); return; } String prompt = editTextPrompt.getText().toString(); //用SharedPreferences方式存储数据 SharedPreferences sp = this.getSharedPreferences("tinyaccount", Context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.putString("name",name); editor.putString("password",pwd); editor.putString("prompt",prompt); editor.apply(); finish(); } }
至此便可完成一个简单的登录注册功能。