1. 程式人生 > >Android簡單的自定義使用者登陸對話方塊

Android簡單的自定義使用者登陸對話方塊

           

二、涉及到的基本元件和原理

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>