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

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

安卓教程全解

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"

可以使窗口表现如对话框

发布了625 篇原创文章 · 获赞 2808 · 访问量 400万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览