Android簡單的自定義使用者登陸對話方塊
阿新 • • 發佈:2019-02-10
二、涉及到的基本元件和原理
1、基本元件:AndroidUI、View、TextView、EditText、Button、CheckBox、動畫Animation、執行緒Thread及Handler等。
2、原理:點選button前判斷使用者輸入的使用者名稱和密碼是否為空,兩個都不為空時執行登陸,啟動登陸動畫,在新執行緒中模擬從遠端登陸的方法(程式中sleep(2000)假設驗證登陸失敗),重新整理介面元件。
三、我的理解和想法,全在程式碼中.....
package com.ui; import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import android.widget.ViewSwitcher; import com.common.UIHelper; import com.example.appmainui.R; import com.widget.BaseActivity; /** * @name 自定義使用者登陸對話方塊 * @descripation 填寫使用者名稱和密碼後,執行登陸,點選註冊按鈕轉註冊頁面 * @author 樊俊彬 * @date 2014-6-8 * @version 1.0 */ public class LoginDialogActivity extends BaseActivity { private EditText loginDialogInputUserName; private EditText loginDialogInputPassword; private Button loginDialogButtonRegist; private CheckBox loginDialogCheckBoxRememberMe; private Button loginDialogButtonLogin; private Button loginDialogButtonCancel; private ViewSwitcher loginDialogViewSwitcher; private View loginDialogView; private AnimationDrawable loginDialogAnimationLoading; private boolean isLoginSuccess = false; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.login_dialog); initUI(); } /** * 初始化介面元件 */ public void initUI() { // 載入介面元件 loginDialogInputUserName = (EditText) findViewById(R.id.loginDialogInputUserName); loginDialogInputPassword = (EditText) findViewById(R.id.loginDialogInputPassword); loginDialogButtonRegist = (Button) findViewById(R.id.loginDialogRegisterButton); loginDialogCheckBoxRememberMe = (CheckBox) findViewById(R.id.loginDialogCheckBoxRememberMe); loginDialogButtonLogin = (Button) findViewById(R.id.loginDialogButtonLogin); loginDialogButtonCancel = (Button) findViewById(R.id.loginDialogButtonCancel); loginDialogViewSwitcher = (ViewSwitcher) findViewById(R.id.loginDialogViewSwitcher); loginDialogView = (View) findViewById(R.id.loginDialogViewLoading); // 點選取消按鈕時結束 loginDialogButtonCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { LoginDialogActivity.this.finish(); } }); // 點選登陸時執行登陸 loginDialogButtonLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 使用者名稱和密碼不能為空 String inputUserName = loginDialogInputUserName.getText() .toString(); String inputPassword = loginDialogInputPassword.getText() .toString(); if (!inputUserName.equals("")) { if (!inputPassword.equals("")) { // 執行登陸操作,開啟登陸動畫 loginDialogAnimationLoading = (AnimationDrawable) loginDialogView .getBackground(); loginDialogAnimationLoading.start(); loginDialogViewSwitcher.showNext(); loginSystem(inputUserName, inputPassword); } else { Toast.makeText(LoginDialogActivity.this, "請輸入密碼", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(LoginDialogActivity.this, "請輸入使用者名稱", Toast.LENGTH_SHORT).show(); } } }); // 點選註冊按鈕時轉註冊頁面 loginDialogButtonRegist.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { UIHelper.showRegistUserInfo(LoginDialogActivity.this); } }); } /** * 啟動新執行緒驗證使用者名稱和密碼,登陸到系統,同步重新整理介面 * * @param inputUserName * @param inputPassword */ protected void loginSystem(String inputUserName, String inputPassword) { // 重新整理介面 final Handler handler = new Handler() { public void handleMessage(Message msg) { // 登陸成功 if (msg.what == 1) { Toast.makeText(LoginDialogActivity.this, "登陸成功", Toast.LENGTH_SHORT).show(); finish(); } // 登陸失敗 if (msg.what == 0) { Toast.makeText(LoginDialogActivity.this, "登陸失敗", Toast.LENGTH_SHORT).show(); loginDialogViewSwitcher.showPrevious(); } } }; // 登陸驗證執行緒 new Thread() { @Override public void run() { super.run(); Message msg = new Message(); try { // 驗證使用者名稱和密碼 sleep(2000); isLoginSuccess = false; if (isLoginSuccess) { // 登陸成功 msg.what = 1; } else { // 登陸失敗 msg.what = 0; } } catch (InterruptedException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }.start(); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/logindialog_space" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ScrollView android:id="@+id/login_scrollview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:paddingLeft="14.0dip" android:paddingRight="14.0dip" android:paddingTop="14.0dip" android:scrollbars="none" > <ViewSwitcher android:id="@+id/loginDialogViewSwitcher" android:layout_width="fill_parent" android:layout_height="wrap_content" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/login_dialog_background" android:paddingBottom="00.0dip"> <!-- 賬號與密碼輸入 --> <LinearLayout android:id="@+id/layout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:layout_marginTop="60.0dip" android:background="@drawable/login_dialog_input" android:orientation="vertical" > <EditText android:id="@+id/loginDialogInputUserName" android:layout_width="fill_parent" android:layout_height="44.0dip" android:background="#00ffffff" android:ems="10" android:hint="點此輸入賬號/郵箱" android:maxLength="16" android:maxLines="1" android:paddingLeft="12.0dip" android:textColor="#ff1d1d1d" android:textColorHint="#ff666666" android:textSize="16.0sp" /> <View android:layout_width="fill_parent" android:layout_height="1.0px" android:layout_marginLeft="1.0px" android:layout_marginRight="1.0px" android:background="#ffc0c3c4" /> <EditText android:id="@+id/loginDialogInputPassword" android:layout_width="fill_parent" android:layout_height="43dp" android:background="#00ffffff" android:ems="10" android:gravity="center_vertical" android:hint="點此請輸入密碼" android:inputType="textPassword" android:maxLength="16" android:maxLines="1" android:paddingLeft="12.0dip" android:textColor="#ff1d1d1d" android:textColorHint="#ff666666" android:textSize="16.0sp" /> </LinearLayout> <RelativeLayout android:id="@+id/layout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/layout1" android:layout_marginBottom="00dip" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" android:layout_marginTop="0dip" > <CheckBox android:id="@+id/loginDialogCheckBoxRememberMe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/login_dialog_checkbox_selector" android:checked="true" android:text="記住我的資訊" android:textColor="@color/black" android:textSize="@dimen/text_size_14" /> <Button android:id="@+id/loginDialogRegisterButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginRight="5dip" android:background="@drawable/login_dialog_register_btn_selector" android:clickable="true" android:text="註冊新賬號" android:textColor="@color/black" android:textSize="@dimen/text_size_12" /> </RelativeLayout> <RelativeLayout android:id="@+id/layout3" android:layout_width="wrap_content" android:layout_height="50dip" android:layout_below="@+id/layout2" android:layout_marginLeft="5dip" android:layout_marginRight="5dip" > <Button android:id="@+id/loginDialogButtonLogin" android:layout_width="140dip" android:layout_height="40dip" android:layout_alignParentLeft="true" android:background="@drawable/login_dailog_button_selector" android:text="登陸" android:textColor="@color/black" android:textSize="@dimen/text_size_20" /> <Button android:id="@+id/loginDialogButtonCancel" android:layout_width="140dip" android:layout_height="40dip" android:layout_alignParentRight="true" android:background="@drawable/login_dailog_button_selector" android:text="取消" android:textColor="@color/black" android:textSize="@dimen/text_size_20" /> </RelativeLayout> </RelativeLayout> <View android:id="@+id/loginDialogViewLoading" android:layout_width="135.0dip" android:layout_height="135.0dip" android:layout_gravity="center" android:background="@anim/login_loading" /> </ViewSwitcher> </ScrollView> </RelativeLayout>