DialogFragment 使用记录
来源:互联网 发布:为什么知乎登录不了 编辑:程序博客网 时间:2024/06/03 17:43
DialogFragment 之前用过几次,但时隔一段儿时间再次用到时,发现之前遇到的问题还是记不住如何解决,今天又用到了,做下记录,权当加深下记忆吧!
先说下遇到的问题:
- dialog的创建方法
- dialog的样式
- 自定义dialog的宽高
- 向dialog中传值及方法回调
创建方法
主要有两种:
1、在onCreateView方法中加载自定义的而已文件;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_prompt, null); unbinder = ButterKnife.bind(this, view); initView(); return view; }
2、在onCreateDialog方法中用AlertDialog 创建对话框。
@Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog .Builder(getActivity()) .setMessage("内容") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); return builder.create(); }
dialog 样式设置
1、通过xml文件的设置
<style name="PromptDialog" parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar"> <!--设置无边框--> <item name="android:windowFrame">@null</item> <!--设置无标题--> <item name="android:windowNoTitle">true</item> <!--设置浮动在窗口之上--> <item name="android:windowIsFloating">true</item> <!--设置窗口内容背景--> <item name="android:windowContentOverlay">@null</item> <!--设置动画风格--> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <!--设置窗口之外背景是否模糊--> <item name="android:backgroundDimEnabled">true</item> </style>
在onCreate方法中设置样式文件
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NORMAL, R.style.PromptDialog); setCancelable(false); }
2、代码设置样式
可以在onDialogCreate()方法中设置,待补充。。。
自定义宽高
@Override public void onResume() { //方法一 WindowManager.LayoutParams layoutParams = getDialog().getWindow().getAttributes(); layoutParams.width = (int) (ScreenUtil.getScreenWidth(getActivity()) * 0.8); layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; getDialog().getWindow().setAttributes(layoutParams); //方法二 getDialog().getWindow().setLayout(200, WindowManager.LayoutParams.WRAP_CONTENT); }
或者在布局文件中进行设置,此时必须在根布局的第一层子布局中设置才有效,且这个字布局之外不能有其他布局。
向dialog中传值及方法回调
传值可用Bundle,回调可以用接口。只是个人觉得这两种方法有些麻烦,就把要传的参数和回调方法都通过接口回调来获取了
public void showDialog(FragmentManager fragmentManager, String tag, PromptDialogCallback callback) { //避免瞬间两连击造成异常崩溃 long currentTime = System.currentTimeMillis(); if (currentTime - mLastShowTime > 100) { mCallback = callback; show(fragmentManager, tag); } mLastShowTime = currentTime; } /** * 初始化布局内容 */ private void initView() { if (mCallback != null) { if (!TextUtil.isEmpty(mCallback.getTitle())) mTvTitle.setText(mCallback.getTitle()); if (!TextUtil.isEmpty(mCallback.getContent())) mTvContent.setText(mCallback.getContent()); if (mCallback.isShowCancel()) { mTvCancel.setVisibility(View.VISIBLE); mVSeparation.setVisibility(View.VISIBLE); } else { mTvCancel.setVisibility(View.GONE); mVSeparation.setVisibility(View.GONE); } } } //这个本应该是接口的,但由于并不是每个对话框都需要所有的参数,所以这里用了抽象类来代替 public abstract static class PromptDialogCallback { protected String getTitle() { return null; } protected abstract String getContent(); protected void onConfirm() {} protected void onCancel() {} protected boolean isShowCancel() { return true; } }
使用
PromptDialog.getInstance().showDialog(getSupportFragmentManager(),this.getClass().getSimpleName(), new PromptDialog.PromptDialogCallback() { @Override protected String getContent() { return message; } @Override protected void onConfirm() { save(); } @Override protected void onCancel() { finalInvalidEditText.setFocusable(true); finalInvalidEditText.setFocusableInTouchMode(true); finalInvalidEditText.requestFocus(); } });
最后要注意DialogFragment中各方法的执行顺序:
show()->onAttach()->onCreate()->onCreateDialog()->onCreateView()->onActivityCreate()……
阅读全文
0 0
- DialogFragment使用记录
- DialogFragment 使用记录
- 使用DialogFragment
- dialogfragment使用
- DialogFragment 使用
- DialogFragment 使用
- 使用DialogFragment
- DialogFragment使用
- 使用DialogFragment
- DialogFragment使用
- Using DialogFragment ——使用DialogFragment
- Android:DialogFragment的使用
- Dialog与DialogFragment使用
- ApiDemos--DialogFragment的使用
- android DialogFragment简单使用
- DialogFragment的使用示例
- 使用DialogFragment 代替 Dialog
- 使用DialogFragment托管dialog
- Spring Boot学习一
- string和stringstream用法总结
- C# 反射性能
- Python基础-数据封装
- 欢迎使用CSDN-markdown编辑器
- DialogFragment 使用记录
- MySql行转列、group_concat使用
- Spring Boot: 开发web 应用
- MyBatis优化——创建工具类
- css3做一个滚动条
- PHP中变量函数和回调函数的定义和简单举例
- 15. 3Sum
- 我对程序员的理解
- Android Html.fromHtml的使用