组件——DialogFragment
2019-07-30 本文已影响0人
四喜汤圆
本篇是对参考文献的学习笔记。感谢作者。
一、作用
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 创建对话框