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)运行效果: