1、 概述
在DialogFragment产生之前,我们创建对话框:一般采用AlertDialog和Dialog。注:官方不推荐直接使用Dialog创建对话框。
2、 好处与用法
使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)。上面会通过例子展示这些好处~
使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。onCreateView即使用定义的xml布局文件展示Dialog。onCreateDialog即利用AlertDialog或者Dialog创建出Dialog。
本文相关源码下载地址:
------------------------------------------分割线------------------------------------------
具体下载目录在 /2015年资料/8月/8日/Android 官方推荐? DialogFragment 创建对话框/
------------------------------------------分割线------------------------------------------
3、 重写onCreateView创建Dialog
a)布局文件,我们创建一个设置名称的布局文件:
? ? android:layout_width="wrap_content"
? ? android:layout_height="wrap_content" >
? ? ? ? ? ? android:id="@+id/id_label_your_name"
? ? ? ? android:layout_width="wrap_content"
? ? ? ? android:layout_height="32dp"
? ? ? ? android:gravity="center_vertical"
? ? ? ? android:text="Your name:" />
? ? ? ? ? ? android:id="@+id/id_txt_your_name"
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="wrap_content"
? ? ? ? android:layout_toRightOf="@id/id_label_your_name"
? ? ? ? android:imeOptions="actionDone"
? ? ? ? android:inputType="text" />
? ? ? ? ? ? android:id="@+id/id_sure_edit_name"
? ? ? ? android:layout_width="wrap_content"
? ? ? ? android:layout_height="wrap_content"
? ? ? ? android:layout_alignParentRight="true"
? ? ? ? android:layout_below="@id/id_txt_your_name"
? ? ? ? android:text="ok" />
b)继承DialogFragment,重写onCreateView方法
package com.example.zhy_dialogfragment;
import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class EditNameDialogFragment extends DialogFragment
{
?@Override
?public View onCreateView(LayoutInflater inflater, ViewGroup container,
? ?Bundle savedInstanceState)
?{
? View view = inflater.inflate(R.layout.fragment_edit_name, container);
? return view;
?}
}
c)测试运行:
Main方法中调用:
public void showEditDialog(View view)
?{
? EditNameDialogFragment editNameDialog = new EditNameDialogFragment();
? editNameDialog.show(getFragmentManager(), "EditNameDialog");
?}
效果图:

可以看到,对话框成功创建并显示出来,不过默认对话框有个讨厌的标题,我们怎么去掉呢:可以在onCreateView中调用getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);即可去掉。即:
public class EditNameDialogFragment extends DialogFragment
{
?@Override
?public View onCreateView(LayoutInflater inflater, ViewGroup container,
? ?Bundle savedInstanceState)
?{
? getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
? View view = inflater.inflate(R.layout.fragment_edit_name, container);
? return view;
?}
}
效果图:

很完美的去掉了讨厌的标题。
4、 重写onCreateDialog创建Dialog在onCreateDialog中一般可以使用AlertDialog或者Dialog创建对话框,不过既然google不推荐直接使用Dialog,我们就使用AlertDialog来创建一个登录的对话框。
a)布局文件
? ? android:layout_width="wrap_content"
? ? android:layout_height="wrap_content"
? ? android:orientation="vertical" >
? ? ? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="64dp"
? ? ? ? android:background="#FFFFBB33"
? ? ? ? android:contentDescription="@string/app_name"
? ? ? ? android:scaleType="center"
? ? ? ? android:src="@drawable/title" />
? ? ? ? ? ? android:id="@+id/id_txt_username"
? ? ? ? android:layout_width="match_p