一日不見,如隔三秋,大家好,小編今天又要分享好東西來了,這次給大家帶來很常用到的控件Dialog對話框,有四種樣式,分別是標準對話框,菜單對話框,複選對話框,自定義對話框,今天就不講自定義對話框,因爲涉及到的知識點多,我打算明天再寫一遍詳細的自定義對話框博客,這也是這四種最重要的一種,分一篇跟大家探討,別的不說,小二,上今天代碼運行成功的界面。
好了,界面已經放上去了,相信大家非常感興趣是怎樣弄出這個效果,心急吃不了熱豆腐哈,接下來,我慢慢道來~~
第一種:標準對話框
/**
* 標準對話框
*/
private void stand() {
//創建AlertDialog對象
AlertDialog.Builder builder = new Builder(context)
//設置對話框的圖標
.setIcon(R.drawable.emoji_100)
//設置對話框的標題
.setTitle("標準對話框")
//設置對話框的提示信息
.setMessage("你吃了嗎?")
//設置確定按鈕,用setPositiveButton方法
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
// 參數一:Dialog 參數二:點擊選擇的一列,可以理解爲索引號的意思
public void onClick(DialogInterface dialog, int which) {
//吐司提示框,上篇博客有介紹到,這是標準的Toast,非自定義
Toast.makeText(DialogActivity.this, "確定成功",
Toast.LENGTH_SHORT).show();
}
})
//設置取消按鈕,參數二:是一個監聽事件, 需寫上DialogInterface才能new出一個監聽
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogActivity.this, "取消成功",
Toast.LENGTH_SHORT).show();
}
});
//創建對象Dialog對象
AlertDialog dialog = builder.create();
//Dialog展示
dialog.show();
}
}
第二種:菜單對話框
/**
* 菜單對話框
*/
private void menuDialog() {
//創建一個數組,存放找到資源xml文件下的item,這裏item裏面有的是顯示的數據
final String[] stringArray = getResources().getStringArray(R.array.eat);
//創建AlertDialog,這裏用的是鏈式方式,開發中是最常用到的
new AlertDialog.Builder(context).setIcon(R.drawable.emoji_101)
.setTitle("菜單對話框")
//創建監聽,因爲這裏是菜單對話框,用到的是setItems , 第一個參數:資源ID或要顯示的數組數據
.setItems(stringArray, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//第二個參數:點擊選擇的數組的某一項,which表示索引號
Toast.makeText(DialogActivity.this, stringArray[which],
Toast.LENGTH_SHORT).show();
}
//生成並展示對話框
}).create().show();
}
第三種:複選對話框
/**
* 複選對話框
*/
private void multDialog() {
//獲取xml定義的數組
final String[] stringArray = getResources().getStringArray(R.array.eat);
new AlertDialog.Builder(context)
.setIcon(R.drawable.emoji_102)
.setTitle("複選對話框")
/** 複選對話框監聽事件
*第一個參數:設置複選項itemsId
*第二個參數:複選項的選擇狀態,所有複選項的默認值是false,但必須與複選項的長度相對應,不然會數組越界
*/
.setMultiChoiceItems(R.array.eat,
new boolean[] { true, true, false, false },
new DialogInterface.OnMultiChoiceClickListener() {
//參數三:是否被選擇
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
//獲取xml被點擊選中的值
String itemStr = stringArray[which];
Toast.makeText(DialogActivity.this,
itemStr + "" + isChecked,
Toast.LENGTH_SHORT).show();
}
})
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//當點擊複選對話框按鈕,則應當獲取複選項
//創建AlertDialog對象
AlertDialog alertDialog = (AlertDialog) dialog;
//取得複選框的ListVIew
ListView listView = alertDialog.getListView();
//通過listView獲取稀疏布爾值數組
SparseBooleanArray checkedItemPositions = listView
.getCheckedItemPositions();
//這裏SparseBooleanArray相同與hashmap ,key表示(integer:position)value(狀態:boolean)
int size = checkedItemPositions.size();
//創建合併器
StringBuilder sb = new StringBuilder();
//for循環,拿到稀疏布爾值的每一個值
for (int i = 0; i < size; i++) {
//判斷取出稀疏布爾值的每一個值
if (checkedItemPositions.valueAt(i)) {
//稀疏布爾值的索引號
int position = checkedItemPositions.keyAt(i);
// 獲取每個索引號的值,用getAdapter裝載數據
//得到每一個索引號的值,用getAdapter裝載數據
String selectItem = listView.getAdapter()
.getItem(position).toString();
//獲得的字符串合併
sb.append(selectItem);
}
}
Toast.makeText(DialogActivity.this, sb.toString(),
Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
}).create().show();
}
今天的講解差不多要告一段落了,主要講了對話框的三種樣式,其中第三種複選對話框是重中之重,也是難點所在。讀者可以慢慢感悟其中的道理,多敲代碼體會場景,多動手反正是沒壞處的,第四種自定義對話框明天跟大家見面,敬請期待,好了,今天就到這裏了,晚安了,程序猿們。。。