DialogFragment初探路
来源:互联网 发布:功夫时时彩软件 编辑:程序博客网 时间:2024/06/14 05:22
三种实现弹窗框的方式
弹出框的三类使用:PopupWindow、dialog,DialogFragment。
使用DialogFragment的好处:
- 使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。
- 且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)
- Android 官方推荐使用 DialogFragment 来代替 Dialog ,可以让它具有更高的可复用性(降低耦合)和更好的便利性(很好的处理屏幕翻转的情况)
- 便于重用,封装使用
使用DialogFragment
使用DialogFragment至少需要实现onCreateView或者onCreateDIalog方法。
- onCreateView即使用定义的xml布局文件展示Dialog,实现复杂的dialog布局
- onCreateDialog即利用AlertDialog或者Dialog创建出Dialog,实现简单统一风格的布局。
1、在onCreateDialog中使用
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder _builder = new AlertDialog.Builder(getActivity()); _builder.setTitle("提示"); _builder.setMessage("是否退出应用?"); _builder.setPositiveButton("确定", null); _builder.setNegativeButton("取消", null); _builder.setCancelable(false); return _builder.create(); }
2、在onCreateView中使用
@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View _view = inflater.inflate(R.layout.dialog_fragment, container); return _view; }
可以看到顶部有一个标题
去掉标题:在onCreateView中添加,在 View _view = inflater.inflate(R.layout.dialog_fragment, container);前面getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
3、传递数据给Activity
从dialog传递数据给Activity,可以使用“fragment interface pattern”的方式,下面通过一个改造上面的登录框来展示这种模式。
创建一个接口用于回调
public interface LoginInputListener { void onLoginInputComplete(String _userName); }
直接贴代码
@Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); View _view = inflater.inflate(R.layout.dialog_fragment, container); unbinder = ButterKnife.bind(this, _view); return _view; } @OnClick(R.id.id_sure_edit_name) public void onViewClicked() { String _userName = idTxtYourName.getText().toString(); //获取宿主Activity的对象 LoginInputListener _listener = (LoginInputListener) getActivity(); _listener.onLoginInputComplete(_userName); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } public interface LoginInputListener { void onLoginInputComplete(String _userName); }
4、实现全屏
实现全屏(宽/高度全屏)// 设置宽度为屏宽、位置靠近屏幕底部Window window = dialog.getWindow();window.setBackgroundDrawableResource(R.color.transparent);WindowManager.LayoutParams wlp = window.getAttributes();wlp.gravity = Gravity.BOTTOM;wlp.width = WindowManager.LayoutParams.MATCH_PARENT;wlp.height = WindowManager.LayoutParams.WRAP_CONTENT;window.setAttributes(wlp);
5、可以根据不同的屏幕分,大屏弹出显示,小屏嵌入Activity
if (mIsLargeLayout) { // The device is using a large layout, so show the fragment as a // dialog newFragment.show(fragmentManager, "dialog"); } else { // The device is smaller, so show the fragment fullscreen FragmentTransaction transaction = fragmentManager.beginTransaction(); // For a little polish, specify a transition animation transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); // To make it fullscreen, use the 'content' root view as the container // for the fragment, which is always the root view for the activity transaction.replace(R.id.id_ly, newFragment).commit(); }
阅读全文
0 0
- DialogFragment初探路
- DialogFragment
- dialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- dialogFragment
- DialogFragment
- DialogFragment
- DialogFragment
- Android DialogFragment
- 使用DialogFragment
- DialogFragment学习
- HTML5介绍
- HTML5-canvas标签
- HTML5-Geolocation(地理定位功能)
- HTML5-Video(视屏播放)
- ButterKnife 8.6.0 使用
- DialogFragment初探路
- HTML5的web存储
- HTML5 Web SQL 数据库
- HTML5 应用程序缓存
- WebWorker和Server-Sent Events和HTML5 WebSocket
- Tinker的简单接入
- 配置Nodejs
- Android 与gradle常见相关问题及解答(1)
- STL之bitset