android 创建Dialog

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:30   1825   0



android使用ShowDialog来显示一个Dialog,当第一次调用ShowDialog时,会调用Activity的onCreateDialog方法,我们只需重写该方法,在改方法中创建一个Dialog.
而onPrepareDialog(int, Dialog)在Dialog显示时每次都会被调用。因此如果要动态修改dialog的信息,可以在改方法中实现.
下面给出使用实例:

 showDialog(v.getId()); // 调用showDialog之后会回调onCreateDialog


@Override
 protected Dialog onCreateDialog(int id) {
  // TODO Auto-generated method stub
  switch (id) {
   case R.id.btnTwobtn:
    return CreateDialog();
   case R.id.btnthreebtn:
    return CreateDialog3();

   case R.id.btnInput:
    return CreateDialogLogin();

   case R.id.btnwait:
    // 启动线程来关闭等待框
    new Thread() {

     @Override
     public void run() {
      int i = 0;
      while (i < 10) {

       try {
        Thread.sleep(1000);
       }
       catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
       }
       i++;
      }
      dismissDialog(R.id.btnwait);
     }
    }.start();
    return CreateProcessDialog();
   case R.id.btnTimePicker:
    return CreateTimePickerDialog();
   default:
    return CreateDialog();
  }

 }

 // 第一个按钮
 private Dialog CreateDialog() {

  AlertDialog.Builder builder = new Builder(this);
  builder.setTitle("dialog test");
  builder.setMessage("点击按钮测试一下吧,看看title的变化");
  builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {

   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    setTitle("click ok");
   }

  });
  builder.setNegativeButton("cancel",
    new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
      setTitle("click cancel");
     }
    });

  return builder.create();
 }

 // 第2个按钮
 private Dialog CreateDialog3() {

  AlertDialog.Builder builder = new Builder(this);
  builder.setTitle("dialog test");
  builder.setMessage("点击按钮测试一下吧,看看3个按钮对title的变化");
  builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {

   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    setTitle("click ok");
   }

  });
  builder.setNegativeButton("cancel",
    new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
      setTitle("click cancel");
     }
    });
  builder.setNeutralButton("详细", new DialogInterface.OnClickListener() {

   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    setTitle("click detail");
   }
  });
  return builder.create();
 }

 // 第3个按钮 弹出输入框
 private Dialog CreateDialogLogin() {

  AlertDialog.Builder builder = new Builder(this);
  // 加载layout文件
  LayoutInflater inflater = LayoutInflater.from(this);
  View view = inflater.inflate(R.layout.logindialog, null);
  builder.setView(view);
  builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {

   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    setTitle("click ok");
   }

  });
  builder.setNegativeButton("cancel",
    new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
      setTitle("click cancel");
     }
    });
  builder.setNeutralButton("详细", new DialogInterface.OnClickListener() {

   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    setTitle("click detail");
   }
  });
  return builder.create();
 }

 // 第4个按钮 等待框
 private Dialog CreateProcessDialog() {
  ProgressDialog dialog = new ProgressDialog(this);
  dialog.setMessage("正在运行,请等待...");

  return dialog;

 }

 // 第5个按钮 时间选择框
 private Dialog CreateTimePickerDialog() {
  TimePickerDialog dialog = new TimePickerDialog(this, 0,
    mTimeSetListener, 0, 0, false);
  return dialog;

 }

 private TimePickerDialog.OnTimeSetListener mTimeSetListener = new TimePickerDialog.OnTimeSetListener() {

  @Override
  public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
   // TODO Auto-generated method stub
   int hour = hourOfDay;
   int minute1 = minute;
   Toast.makeText(getBaseContext(),
     "You have selected : " + hour + ":" + minute1,
     Toast.LENGTH_SHORT).show();
  }
 };

运行结果如下:










如果我们想把一个Activity显示为一个Dialog形式,可以在androidManifest.xml中的activity的属性设为android:theme="@android:style/Theme.Dialog,伪装为dialog

           <activity android:name="DialogActivity" android:theme="@android:style/Theme.Dialog"></activity>

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP