今天的工作是實現了注冊登錄功能。
根據邏輯,啟動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(); } }
至此便可完成一個簡單的登錄注冊功能。