Dialog对话框的四种显示样式

一日不见,如隔三秋,大家好,小编今天又要分享好东西来了,这次给大家带来很常用到的控件Dialog对话框,有四种样式,分别是标准对话框,菜单对话框,复选对话框,自定义对话框,今天就不讲自定义对话框,因为涉及到的知识点多,我打算明天再写一遍详细的自定义对话框博客,这也是这四种最重要的一种,分一篇跟大家探讨,别的不说,小二,上今天代码运行成功的界面。

Dialog对话框的四种显示样式_第1张图片Dialog对话框的四种显示样式_第2张图片




Dialog对话框的四种显示样式_第3张图片



好了,界面已经放上去了,相信大家非常感兴趣是怎样弄出这个效果,心急吃不了热豆腐哈,接下来,我慢慢道来~~



第一种:标准对话框


/**
  * 标准对话框
  */
 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();

 }


今天的讲解差不多要告一段落了,主要讲了对话框的三种样式,其中第三种复选对话框是重中之重,也是难点所在。读者可以慢慢感悟其中的道理,多敲代码体会场景,多动手反正是没坏处的,第四种自定义对话框明天跟大家见面,敬请期待,好了,今天就到这里了,晚安了,程序猿们。。。






你可能感兴趣的:(Dialog对话框的四种显示样式)