Android之自定义LoginDialog

        Dialog是指一个小窗口,通常也是模态窗口。除了4钟常用的:AlertDialog、ProgressDialog、DatePickerDialog、TimePickerDialog外,我们还可以自定义一些Dialog,当然我们也可以对其实现封装,方便以后使用。

        下面,我主要介绍一个用于登录的LoginDialog。它的主要部分有: 

                (1)通过LoginDialog ld = new LoginDialog(getContext());创建并初始化LoginDialog
                (2)通过lg.setShowTitle(false);设置是否显示窗口的标题
                (3)通过ld.setLoginListener(new LoginDialog.OnLoginListener(){ ...});设置“登录”按钮的监听事件
                (4)ld.show();显示LoginDialog

         通过代码展示:

         (1)login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_vertical_margin"
    >

    <TextView
        android:id="@+id/tv_dialogTitle"
        android:text="用户登录"
        android:gravity="center"
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <EditText
        android:hint="账号"
        android:textSize="19sp"
        android:id="@+id/editUserName"
        android:layout_width="match_parent"
        android:layout_height="40dp" />
    <EditText
        android:inputType="numberPassword"
        android:hint="密码"
        android:textSize="19sp"
        android:id="@+id/editPassword"
        android:layout_width="match_parent"
        android:layout_height="40dp" />
    <CheckBox
        android:id="@+id/cbServiceItem"
        android:text="已经阅读用户协议"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:text="马上登录"
        android:id="@+id/btnLogin"
        android:textColor="@color/white"
        android:textSize="19sp"
        android:background="@drawable/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
         (2)LoginDialog.java

package com.example.administrator.dialogdemo.LoginDialog;

import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

import com.example.administrator.dialogdemo.R;

/**
 * Created by Administrator on 2016/9/5.
 */
public class LoginDialog extends AlertDialog{

    private Context context;
    private TextView tv_dialogTitle;
    private EditText editUserName ,editPassword;
    private CheckBox cbServiceItem;
    private AlertDialog.Builder builder;
    private View view;
    private onLoginListener loginListener = null;
    private Button btnLogin;

    //创建并初始化LoginDialog
    public LoginDialog(Context context) {
        super(context);

        this.context = context;
        builder = new AlertDialog.Builder(context);
        //动态加载布局
        view = LayoutInflater.from(context).inflate(R.layout.login,null);

        tv_dialogTitle = (TextView) view.findViewById(R.id.tv_dialogTitle);
        editUserName = (EditText) view.findViewById(R.id.editUserName);
        editPassword = (EditText) view.findViewById(R.id.editPassword);
        cbServiceItem = (CheckBox) view.findViewById(R.id.cbServiceItem);
        
        //设置登录按钮(btnLogin)的监听事件
        view.findViewById(R.id.btnLogin).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                loginListener.onClick(v);
            }
        });
        builder.setView(view);
        builder.create();
    }

    //getter
    public EditText getEditPassword() {
        return editPassword;
    }

    public EditText getEditUserName() {
        return editUserName;
    }

    public CheckBox getCbServiceItem() {
        return cbServiceItem;
    }

    //设置LoginDialog的标题是否显示
    public void setShowTitle(boolean isShowTitle){
        if (isShowTitle)
            tv_dialogTitle.setVisibility(TextView.VISIBLE);
        else
            tv_dialogTitle.setVisibility(TextView.INVISIBLE);
    }

    //显示LoginDialog
    public void show(){
        builder.show();
    }

    //自定义onLoginListener接口
    public interface onLoginListener{
        void onClick(View v);
    }

    //自定义setLoginListener
    public void setLoginListener(onLoginListener loginListener){
        this.loginListener = loginListener;
    }

}
        (3)MainActivity.java( 重点红色部分)

package com.example.administrator.dialogdemo;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Checkable;
import android.widget.EditText;
import android.widget.Toast;

import com.example.administrator.dialogdemo.LoginDialog.LoginDialog;


public class MainActivity extends AppCompatActivity implements View.OnClickListener{
//    Button btnNormalDialog;

    String TAG = "状态。。。。。。。。";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btnNormalDialog).setOnClickListener(this);
        findViewById(R.id.btnListDialog).setOnClickListener(this);
        findViewById(R.id.btnSingleChoiceDialog).setOnClickListener(this);
        findViewById(R.id.btnMultiDialog).setOnClickListener(this);
        findViewById(R.id.btnCustomDialog).setOnClickListener(this);
        findViewById(R.id.btnCustomLoginDialog).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id){
            case R.id.btnNormalDialog:
                btnNormalDialog();
                break;
            case R.id.btnListDialog:
                btnListDialog();
                break;
            case R.id.btnSingleChoiceDialog:
                btnSingleChoiceDialog();
                break;
            case R.id.btnMultiDialog:
                btnMultiDialog();
                break;
            case R.id.btnCustomDialog:
                openLoginDialog();
                break;
            case R.id.btnCustomLoginDialog:
                openCustomerDialog();
                break;
            default:
                break;
        }
    }

    public void btnNormalDialog(){
        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext());
                alertDialog.setTitle("普通Dialog")
                .setIcon(R.mipmap.ic_launcher)
                .setMessage("这是普通Dialog")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"点击了确定按钮",Toast.LENGTH_SHORT).show();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"点击了取消按钮",Toast.LENGTH_SHORT).show();
                        dialog.cancel();
                        dialog.dismiss();
                    }
                })
                .setNeutralButton("忽略", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"点击了忽略按钮",Toast.LENGTH_SHORT).show();
                    }
                })
                .create()
                .show();
        alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                Toast.makeText(getContext(),"alertDialog的OnCancelListener",Toast.LENGTH_SHORT).show();
            }
        });
        alertDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
            @Override
            public void onDismiss(DialogInterface dialog) {
                Toast.makeText(getContext(),"alertDialog的OnDismissListener",Toast.LENGTH_SHORT).show();
            }
        });
    }

    private String city [] = {"北京","上海","广州"};

    public void btnListDialog(){
        new AlertDialog.Builder(getContext())
                .setTitle("列表窗口")
                .setItems(city, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"选择了" + city[which].toString(),Toast.LENGTH_SHORT).show();
                    }
                })
                .create()
                .show();
    }

    public void btnSingleChoiceDialog(){
        new AlertDialog.Builder(getContext())
                .setTitle("单选窗口")
                .setSingleChoiceItems(city, 0, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(getContext(),"选择了" + city[which].toString(),Toast.LENGTH_SHORT).show();
                    }
                })
                .create()
                .show();
    }

    public void btnMultiDialog(){
        new AlertDialog.Builder(getContext())
                .setTitle("多选窗口")
                .setMultiChoiceItems(city,
                        null,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                                Toast.makeText(getContext(),"当前选择" + city[which].toString(),Toast.LENGTH_SHORT).show();
                            }
                        })
                .create()
                .show();
    }

    public void openLoginDialog(){
        final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());

        View view = LayoutInflater.from(getContext()).inflate(R.layout.login,null);
        Button btnLogin = (Button) view.findViewById(R.id.btnLogin);

        final EditText editUserName = (EditText) view.findViewById(R.id.editUserName);
        final EditText editPassword = (EditText) view.findViewById(R.id.editPassword);

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG,"这里:" + "用户名:" + editUserName.getText() + "_密码:" +
                        editPassword.getText());
                Toast.makeText(getContext(),"用户名:" + editUserName.getText() + "_密码:" +
                        editPassword.getText(),Toast.LENGTH_SHORT).show();
            }
        });
        //setView:设置自定义view
        builder.setView(view);
        builder.create().show();

        //作业
//        LoginDialog ld = new LoginDialog(getContext())
//        lg.setShowTitle(false);
//        ld.setLoginListener(new LoginDialog.OnLoginListener(){ });
//        ld.show();
    }

    <span style="color:#ff6666;">//自定义LoginDialog
    public void openCustomerDialog(){
        final LoginDialog loginDialog = new LoginDialog(getContext());
        loginDialog.setShowTitle(true);
        loginDialog.setLoginListener(new LoginDialog.onLoginListener() {
            final EditText editUserName = loginDialog.getEditUserName();
            final EditText editPassword = loginDialog.getEditPassword();
            final CheckBox cbServiceItem = loginDialog.getCbServiceItem();
            @Override
            public void onClick(View v) {
                //显示用户名、密码、是否阅读服务条款
                Toast.makeText(getContext(),"用户名:" + editUserName.getText() + "_密码:" +
                        editPassword.getText() + "\n" + (cbServiceItem.isChecked() ? "已读服务条款" : "未读服务条款"),Toast.LENGTH_SHORT).show();
            }
        });
        //显示LoginDialog
        loginDialog.show();</span>
    }

    //获取当前对象
    private Context getContext(){
        return this;
    }

    //查看生命周期
    @Override
    protected void onPause() {
        Log.d(TAG,"onPause...");
        super.onPause();
    }

    @Override
    protected void onResume() {
        Log.d(TAG,"onResume...");
        super.onResume();
    }

    @Override
    protected void onRestart() {
        Log.d(TAG,"onRestart...");
        super.onRestart();
    }

    @Override
    protected void onStop() {
        Log.d(TAG,"onStop...");
        super.onStop();
    }
}
       (4)运行效果:

                       







评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值