參考于:
Android之Dialog詳解
7種形式的Android Dialog使用舉例
(一)概述
android中的dialog可以分為5類:一般對話框,列表對話框,單選按鈕對話框,多選對話框,自定義對話框。
(二)一般對話框
樣式:

20150306140325734[1].png
AlertDialog.Builder builder = new AlertDialog.Builder(this); //先得到構(gòu)造器
builder.setTitle("提示"); //設(shè)置標(biāo)題
builder.setMessage("是否確認(rèn)退出"); //設(shè)置內(nèi)容
builder.setIcon(R.mipmap.ic_launcher); //自定義圖標(biāo)
builder.setCancelable(false); //設(shè)置是否能點(diǎn)擊,對話框的其他區(qū)域取消
builder.setPositiveButton("確認(rèn)", new DialogInterface.OnClickListener() { //設(shè)置其確認(rèn)按鈕和監(jiān)聽事件
@Override
public void onClick(DialogInterface dialog, int which) {
// which,是哪一個按鈕被觸發(fā)
// 其值如下:
// Dialog.BUTTON_NEGATIVE 忽略
// Dialog.BUTTON_POSITIVE 確認(rèn)
// Dialog.BUTTON_NEUTRAL 取消
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { //設(shè)置其取消按鈕和監(jiān)聽事件
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("忽略", new DialogInterface.OnClickListener() { //設(shè)置其忽略按鈕和監(jiān)聽事件
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create(); //創(chuàng)建對話框
builder.show(); //顯示對話框
}
可以利用Which的值,把以上的代碼簡化:
private void dialog1_1(){
//先new出一個監(jiān)聽器,設(shè)置好監(jiān)聽
DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
switch(which){
case Dialog.BUTTON_POSITIVE:
Toast.makeText(MainActivity.this, "確認(rèn)" + which, Toast.LENGTH_SHORT).show();
break;
case Dialog.BUTTON_NEGATIVE:
Toast.makeText(MainActivity.this, "取消" + which, Toast.LENGTH_SHORT).show();
break;
case Dialog.BUTTON_NEUTRAL:
Toast.makeText(MainActivity.this, "忽略" + which, Toast.LENGTH_SHORT).show();
break;
}
}
};
//dialog參數(shù)設(shè)置
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器
builder.setTitle("提示"); //設(shè)置標(biāo)題
builder.setMessage("是否確認(rèn)退出?"); //設(shè)置內(nèi)容
builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可
builder.setPositiveButton("確認(rèn)",dialogOnclicListener);
builder.setNegativeButton("取消", dialogOnclicListener);
builder.setNeutralButton("忽略", dialogOnclicListener);
builder.create().show();
}
(三)列表對話框
樣式:

2016-04-18_100530.png
final String items[] = {"AAA","BBB","CCC"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示"); //設(shè)置標(biāo)題
//builder.setMessage("是否確認(rèn)退出?"); //設(shè)置內(nèi)容
builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可
//設(shè)置列表顯示,注意設(shè)置了列表顯示就不要設(shè)置builder.setMessage()了,否則列表不起作用。
builder.setItems(items,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
(四)單選按鈕對話框

2016-04-18_101253.png
final String items[]={"男","未知","女"};
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器
builder.setTitle("提示"); //設(shè)置標(biāo)題
builder.setIcon(R.mipmap.ic_launcher); //設(shè)置圖標(biāo),圖片id即可
//設(shè)置單選按鈕
// items 為列表項(xiàng)
// 0 為默認(rèn)選中第一個
// 第三個參數(shù)是監(jiān)聽器
builder.setSingleChoiceItems(items,0,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//dialog.dismiss();
Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
}
});
// 設(shè)置監(jiān)聽器
builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
}
});
builder.create().show();
(五)多選按鈕對話框

2016-04-18_101741.png
final String items[]={"籃球","足球","排球"};
final boolean selected[]={true,false,true};
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器
builder.setTitle("提示"); //設(shè)置標(biāo)題
builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可
// 參數(shù)一:列表項(xiàng)
// 參數(shù)二:默認(rèn)打勾的
// 參數(shù)三:監(jiān)聽器
builder.setMultiChoiceItems(items,selected,new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// dialog.dismiss();
Toast.makeText(MainActivity.this, items[which]+isChecked, Toast.LENGTH_SHORT).show();
}
});
// 確認(rèn)按鈕
builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
//android會自動根據(jù)你選擇的改變selected數(shù)組的值。
for (int i=0;i<selected.length;i++){
Log.e("hongliang",""+selected[i]);
}
}
});
builder.create().show();
(六)自定義對話框

2016-04-18_103914.png
dialog的布局文件
<?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">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:gravity="center"
android:hint="name"
android:ems="10"
android:id="@+id/editText_name"
android:layout_gravity="center_horizontal" />
<EditText
android:gravity="center"
android:hint="password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/editText_password"
android:layout_gravity="center_horizontal" />
</LinearLayout>
代碼:
//其實(shí)對話框里面很多東西都是可以自定義的
// 1. 圖標(biāo)
// 2. 整個布局
AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到構(gòu)造器
builder.setTitle("自定義dialog"); //設(shè)置標(biāo)題
builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可
// 載入布局
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog_cell,null);
builder.setView(layout);
// 對布局中的控件監(jiān)聽
EditText editText_name = (EditText) layout.findViewById(R.id.editText_name);
EditText editText_password = (EditText) layout.findViewById(R.id.editText_password);
editText_name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"name is on click",Toast.LENGTH_LONG).show();
}
});
// 確認(rèn)按鈕
builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
// 顯示
builder.create().show();
(七)總結(jié)
其實(shí)dialog算是挺簡單的東西,不過想要駕馭它,不要以為掌握以上的就可以了,你應(yīng)該完全讀透dialog這個控件的源碼,并且自己能寫出來。雖然說,不建議重復(fù)制作輪子,但是,我們必須有造輪子的能力。
以后我會寫一篇造dialog輪子的文章,不過不知道是什么時候了。