Dialog對話框的四種顯示樣式

一日不見,如隔三秋,大家好,小編今天又要分享好東西來了,這次給大家帶來很常用到的控件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();

 }


今天的講解差不多要告一段落了,主要講了對話框的三種樣式,其中第三種複選對話框是重中之重,也是難點所在。讀者可以慢慢感悟其中的道理,多敲代碼體會場景,多動手反正是沒壞處的,第四種自定義對話框明天跟大家見面,敬請期待,好了,今天就到這裏了,晚安了,程序猿們。。。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章