欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

安卓Dialog弹出对话框全解:包含了AlertDialog,DialogFragment

程序员文章站 2023-01-29 20:57:07
安卓dialog弹出对话框全解:包含了alertdialog,dialogfragment。dialog基类中并没有定义界面,所以如果使用dialog类设置弹出框,需要使用xml自...

安卓dialog弹出对话框全解:包含了alertdialog,dialogfragment。dialog基类中并没有定义界面,所以如果使用dialog类设置弹出框,需要使用xml自定义ui。

当然也自带了几个dialog派生的弹出框,例如alert dialog,并设置好了ui,你可以直接调用系统自带的dialog衍生品。除此之外,activity和fragment也可以作为dialog样式弹出使用。

dialog基类创建弹出框

1、首先你需要为你的dialog设置布局界面

这里添加布局界面为dialog_view.xml文件



  

2、使用dialog类创建一个新的对话框

    private void displaynewdialog() {
      dialog dialog = new dialog(dialog_activity.this);  //为当前窗口创建一个弹出框
      //设置标题
      dialog.settitle("dialog title");
      //填充布局
      dialog.setcontentview(r.layout.dialog_view);

      //更新对话框的ui
      textview text = (textview)dialog.findviewbyid(r.id.dialog_text_view);
      text.settext("this is the text in my dialog");

      //显示对话框
      dialog.show();
    }

使用alert dialog定义弹出框

 //配置一个alert dialog
    private void displayalertdialog() {
      context context = dialog_activity.this;
      string title = "对话框标题";
      string message = "对话框内容";
      string button1string = "确定";
      string button2string = "取消";

      alertdialog.builder ad = new alertdialog.builder(context);
      ad.settitle(title);
      ad.setmessage(message);

      //确定按钮点击事件
      ad.setpositivebutton(button1string,new dialoginterface.onclicklistener() {
          public void onclick(dialoginterface dialog, int arg1) {
            log.v("弹出框", "点击了确定按钮");
          }
        }
      );

      //取消按钮点击事件
      ad.setnegativebutton(button2string,new dialoginterface.onclicklistener(){
          public void onclick(dialoginterface dialog, int arg1) {
              log.v("弹出框", "点击了取消按钮");
          }
        }
      );

      //设置对话框在点击返回物理键时的操作。
      ad.setcancelable(true);
      ad.setoncancellistener(new dialoginterface.oncancellistener() {
        @override
        public void oncancel(dialoginterface dialog) {
            log.v("弹出框", "点击了物理键——返回");
        }
      });

      //显示对话框
      ad.show();
    }

将fragment定义为dialog显示

系统自带了dialogfragment类用来实现使用fragment实现dialog效果,dialogfragment继承自fragment。

dialog的界面还是使用上面的dialog_view.xml文件

下面实现一个自定义的dialogfragment。其中设置布局有两种方式,可以在oncreateview函数中返回一个自定义布局的view,也可以在oncreatedialog函数中函数一个dialog。不过两者不能同时使用。

import com.lp.app.r;

import android.app.alertdialog;
import android.app.dialog;
import android.app.dialogfragment;
import android.os.bundle;
import android.view.layoutinflater;
import android.view.view;
import android.view.viewgroup;
import android.widget.textview;


public class dialogfragment1 extends dialogfragment {


  public static dialogfragment1 newinstance(string title,string message) {
    //创建一个新的带有指定参数的fragment实例
    dialogfragment1 fragment = new dialogfragment1();
    bundle args = new bundle();
    args.putstring("title", title);   //将参数存储在bundle,在程序暂停重启不会被销毁
    args.putstring("message", message);   //将参数存储在bundle,在程序暂停重启不会被销毁
    fragment.setarguments(args);

    return fragment;
  }

//使用oncreatdialog事件处理程序。oncreateview与oncreatdialog只能二选一
//  @override
//  public dialog oncreatedialog(bundle savedinstancestate) {
//          //获取参数
//          string title = getarguments().getstring("title");
//          string message = getarguments().getstring("message");
//          //使用alertbuilder创建新的对话框
//          alertdialog.builder timedialog = new alertdialog.builder(getactivity());
//          //配置对话框ui.
//          timedialog.settitle(title);
//          timedialog.setmessage(message);
//          //返回配置完成的对话框
//          return timedialog.create();
//  }
//  
  //使用oncreateview自定义布局。oncreateview与oncreatdialog只能二选一

  @override
  public view oncreateview(layoutinflater inflater, viewgroup container,
    bundle savedinstancestate) {
      //获取参数
      string title = getarguments().getstring("title");
      string message = getarguments().getstring("message");
      //填充对话框的ui
      view view = inflater.inflate(r.layout.dialog_view, container, false);

      //更新对话框内容
      textview textview = (textview)view.findviewbyid(r.id.dialog_text_view);
      textview.settext(message);

      return view;
  }


}

再在需要弹出dialog的地方,弹出这个对话框

    private void showdialogfragment() {
      string title = "标题";
      string message = "要显示的文本";
      string tag = "my_dialog";
      dialogfragment myfragment = dialogfragment1.newinstance(title,message);
      myfragment.show(getfragmentmanager(), tag);
    }

将activity定义为dialog显示

只需要在mainfest文件中注册activity时设置

android:theme="@android:style/theme.dialog"

可以使窗口表现如对话框