本篇是对参考文献的学习笔记。感谢作者。
一、作用
Google 官方推荐使用
DialogFragment
来代替Dialog
,因为它有更好的可复用性
二、概念——创建 DialogFragment 的方法
1. 复写onCreateDialog()
用于替代传统的 Dialog,UI 简单,功能单一。
为简单地替代传统 Dialog 提供了非常快捷的创建方式。
2. 复写onCreateView()
用于创建复杂内容弹窗或全屏显示效果,UI 复杂,功能复杂,一般有网络请求等异步操作。
该方法在创建 Dialog 时默认使用了自定义 View,更便于实现复杂布局。
三、使用
1. 复写onCreateDialog()
(1)创建类继承DialogFragment
,并复写方法
- 创建一个 Dialog 并返回它
public class DialogFrg1 extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
// 创建一个 Dialog 并返回它
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("title")
.setMessage("message")
.setPositiveButton("确定", null)
.setNegativeButton("取消", null);
// 不可在此处使用show()方法
// builder.show();
return builder.create();
}
}
- 使用自定义布局创建一个 Dialog 并返回它
public class DialogFrag2 extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
// 加载自定义布局
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.activity_animator, null);
builder.setView(view);
return builder.create();
}
}
(2)
2. 复写onCreateView()
该方法和使用 Fragment 差不多
(1)创建类继承DialogFragment
,并复写方法
public class DialogFrag3 extends DialogFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// 加载布局:第3个参数要设置成false
View view = inflater.inflate(R.layout.activity_animator, container, false);
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置主题调用setStyle()
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.CustomDialog);
}
}
四、注意
1. 处理屏幕翻转
如果使用传统的 Dialog 需要我们手动处理屏幕翻转情况,DialogFragment 不需要我们做任何处理,FragmentManager 会自动管理 DialogFragment 的生命周期。
2. 设置无标题栏
3. 设置全屏
参考文献
Android 必知必会 - DialogFragment 使用总结
Android 官方推荐 : DialogFragment 创建对话框
网友评论