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

来源:互联网 发布:plc编程基础教程 编辑:程序博客网 时间:2024/05/22 01:47

全栈工程师开发手册 (作者:栾鹏)

安卓教程全解

Dialog基类中并没有定义界面,所以如果使用dialog类设置弹出框,需要使用xml自定义UI。

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

dialog基类创建弹出框

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

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

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical">  <TextView      android:id="@+id/dialog_text_view"      android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:text="This is a Dialog!" />  <Button      android:id="@+id/dialog_button"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:text="Button" /></LinearLayout>

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"

可以使窗口表现如对话框

原创粉丝点击