參考于:
Android之Dialog詳解
7種形式的Android Dialog使用舉例
(一)概述
android中的dialog可以分為5類:一般對(duì)話框冈涧,列表對(duì)話框世吨,單選按鈕對(duì)話框,多選對(duì)話框呻征,自定義對(duì)話框耘婚。
(二)一般對(duì)話框
樣式:
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)擊,對(duì)話框的其他區(qū)域取消
builder.setPositiveButton("確認(rèn)", new DialogInterface.OnClickListener() { //設(shè)置其確認(rèn)按鈕和監(jiān)聽(tīng)事件
@Override
public void onClick(DialogInterface dialog, int which) {
// which陆赋,是哪一個(gè)按鈕被觸發(fā)
// 其值如下:
// Dialog.BUTTON_NEGATIVE 忽略
// Dialog.BUTTON_POSITIVE 確認(rèn)
// Dialog.BUTTON_NEUTRAL 取消
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { //設(shè)置其取消按鈕和監(jiān)聽(tīng)事件
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setNegativeButton("忽略", new DialogInterface.OnClickListener() { //設(shè)置其忽略按鈕和監(jiān)聽(tīng)事件
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create(); //創(chuàng)建對(duì)話框
builder.show(); //顯示對(duì)話框
}
可以利用Which的值沐祷,把以上的代碼簡(jiǎn)化:
private void dialog1_1(){
//先new出一個(gè)監(jiān)聽(tīng)器,設(shè)置好監(jiān)聽(tīng)
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();
}
(三)列表對(duì)話框
樣式:
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();
(四)單選按鈕對(duì)話框
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)選中第一個(gè)
// 第三個(gè)參數(shù)是監(jiān)聽(tīng)器
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)聽(tīng)器
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();
(五)多選按鈕對(duì)話框
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)聽(tīng)器
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會(huì)自動(dòng)根據(jù)你選擇的改變selected數(shù)組的值色乾。
for (int i=0;i<selected.length;i++){
Log.e("hongliang",""+selected[i]);
}
}
});
builder.create().show();
(六)自定義對(duì)話框
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í)對(duì)話框里面很多東西都是可以自定義的
// 1. 圖標(biāo)
// 2. 整個(gè)布局
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);
// 對(duì)布局中的控件監(jiān)聽(tīng)
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算是挺簡(jiǎn)單的東西领突,不過(guò)想要駕馭它暖璧,不要以為掌握以上的就可以了,你應(yīng)該完全讀透dialog這個(gè)控件的源碼君旦,并且自己能寫出來(lái)澎办。雖然說(shuō),不建議重復(fù)制作輪子金砍,但是局蚀,我們必須有造輪子的能力。
以后我會(huì)寫一篇造dialog輪子的文章恕稠,不過(guò)不知道是什么時(shí)候了琅绅。