DialogFragUtil 打造一款DialogFragment的统一封装类
来源:互联网 发布:603383顶点软件 业绩 编辑:程序博客网 时间:2024/05/16 11:01
/*** * DialogFragUtil 打造一款DialogFragment的统一封装类 * 我的qq号:1457521527;欢迎互相学习~ * ****欢迎star**** * @author yjbo * @create 2017.03.29 23:00 */
一.参考:
1.(封装布局内的id)封装adapter内使用的保存layout的id方法:
http://www.cniao5.com/forum/thread/2ac69d820f0611e790dc00163e0230fa
2.(自定义DialogFragment的高度使用)https://github.com/shaohui10086/BottomDialog.git
二.源码:
点击下载
三.效果图:
四.代码分析:
主要代码:/** * 参考:封装adapter内使用的保存layout的id方法:http://www.cniao5.com/forum/thread/2ac69d820f0611e790dc00163e0230fa * @author yjbo * @time 2017/4/22 13:55 */public class ViewHolderUtil { private SparseArray<View> mViews; private View mItemView; public ViewHolderUtil(View itemView) { mItemView = itemView; this.mViews = new SparseArray<>(); } /** * 从ItemView获取View * * @param id ItemView里包含的ViewId * @param <V> 返回View * @return */ public <V extends View> V getView(int id) { View view = mViews.get(id); if (view == null) { view = mItemView.findViewById(id); mViews.put(id, view); } return (V) view; } /** * 设置TextView的值 * * @param viewId * @param text * @return */ public ViewHolderUtil setText(int viewId, String text) { TextView tv = getView(viewId); tv.setText(text); return this; } /** * 设置ImageView的值 * * @param viewId * @param resId * @return */ public ViewHolderUtil setImageResource(int viewId, int resId) { ImageView view = getView(viewId); view.setImageResource(resId); return this; } /** * 设置ImageView的值 * 第三方 ImageLoder Glide Picasso * 不能直接写死第三方图片加载 * 使用自己的一套规范 ImageLoder * * @param viewId * @return */ public ViewHolderUtil setImagePath(int viewId, ImageLoder imageLoder) { ImageView view = getView(viewId); imageLoder.loadImage(view, imageLoder.getPath()); return this; } //图片加载 (对第三方库加载图片等封装) public abstract static class ImageLoder { private String path; public ImageLoder(String path) { this.path = path; } //需要复写该方法加载图片 public abstract void loadImage(ImageView imageView, String path); public String getPath() { return path; } } /** * 设置是否可见 * * @param viewId * @param visible * @return */ public ViewHolderUtil setVisible(int viewId, boolean visible) { View view = getView(viewId); view.setVisibility(visible ? View.VISIBLE : View.GONE); return this; } /** * 设置tag * * @param viewId * @param tag * @return */ public ViewHolderUtil setTag(int viewId, Object tag) { View view = getView(viewId); view.setTag(tag); return this; } public ViewHolderUtil setTag(int viewId, int key, Object tag) { View view = getView(viewId); view.setTag(key, tag); return this; } /** * 设置Checkable * * @param viewId * @param checked * @return */ public ViewHolderUtil setChecked(int viewId, boolean checked) { Checkable view = (Checkable) getView(viewId); view.setChecked(checked); return this; } //点击事件 public ViewHolderUtil setOnClickListener(int viewId, View.OnClickListener listener) { View view = getView(viewId); view.setOnClickListener(listener); return this; } //触摸事件 public ViewHolderUtil setOnTouchListener(int viewId, View.OnTouchListener listener) { View view = getView(viewId); view.setOnTouchListener(listener); return this; } //长按事件 public ViewHolderUtil setOnLongClickListener(int viewId, View.OnLongClickListener listener) { View view = getView(viewId); view.setOnLongClickListener(listener); return this; }}
在初始化下一个弹出框的时候把上个弹出框先去掉 if (simpleDialogFrag != null && simpleDialogFrag.isVisible()) { simpleDialogFrag.dismiss(); }
/** * 最简单的DialogFragment样式 * * @author yjbo * @qq 1457521527 * @time 2017/4/22 14:18 */public abstract class SimpleDialogFrag extends DialogFragment { private boolean mIsKeyCanback = true; private boolean mIsOutCanback = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public SimpleDialogFrag() { } /** * isKeyCanback 点击物理返回键可以取消 * isOutCanback 点击除了弹出框其他地方可以取消 * * @author yjbo @time 2017/4/22 16:26 */ public SimpleDialogFrag(boolean isOutCanback, boolean isKeyCanback) { mIsKeyCanback = isKeyCanback; mIsOutCanback = isOutCanback; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); getDialog().setCanceledOnTouchOutside(mIsOutCanback);//弹出框外面是否可取消 getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {// getDialog().setCanceledOnTouchOutside(mIsKeyCanback);//键盘点击时是否可以取消--不需要设置了 return !mIsKeyCanback;//return true 不往上传递则关闭不了,默认是可以取消,即return false } else { return false; } } }); View view = bindLayout(inflater, container); return view; } protected abstract View bindLayout(LayoutInflater inflater, ViewGroup container); //关闭弹出框 public void hideDialog() { try { Dialog dialog = getDialog();//没初始化就会出现问题 if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } } catch (Exception ex) { ex.printStackTrace(); } }}
/** * 复杂的DialogFragment样式 * 可以设置弹出框的宽和高 * * @author yjbo * @qq 1457521527 * @time 2017/4/22 14:18 */public abstract class ComplexDialogFrag extends DialogFragment { private boolean mIsKeyCanback = true; private boolean mIsOutCanback = true; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //参考 2.https://github.com/shaohui10086/BottomDialog.git;放其他地方就没有这个效果 setStyle(DialogFragment.STYLE_NO_TITLE, R.style.BottomDialog); } public ComplexDialogFrag() { } /** * isKeyCanback 点击物理返回键可以取消 * isOutCanback 点击除了弹出框其他地方可以取消 * * @author yjbo @time 2017/4/22 16:26 */ public ComplexDialogFrag(boolean isOutCanback, boolean isKeyCanback) { mIsKeyCanback = isKeyCanback; mIsOutCanback = isOutCanback; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {// getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE); getDialog().setCanceledOnTouchOutside(mIsOutCanback);//弹出框外面是否可取消 getDialog().setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {// getDialog().setCanceledOnTouchOutside(mIsKeyCanback);//键盘点击时是否可以取消--不需要设置了 return !mIsKeyCanback;//return true 不往上传递则关闭不了,默认是可以取消,即return false } else { return false; } } }); View view = bindLayout(inflater, container); return view; } @Override public void onStart() { super.onStart(); //获取手机屏幕的长和宽 WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay().getHeight(); //这个设置宽高的必须放在onstart方法里,不能放oncreateview里面 Window dialogWindow = getDialog().getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); dialogWindow.setGravity(Gravity.CENTER);// 布局文件居中// dialogWindow.setLayout(lp.MATCH_PARENT, lp.WRAP_CONTENT);// 为了让对话框宽度铺满 //alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明,自身不可见。 //设置弹窗的宽度, lp.width = width - getResources().getDimensionPixelSize(R.dimen.dialogfrag_margin); lp.height = WindowManager.LayoutParams.WRAP_CONTENT;// lp.alpha=0.5f; dialogWindow.setAttributes(lp); } protected abstract View bindLayout(LayoutInflater inflater, ViewGroup container); //关闭弹出框 public void hideDialog() { try { Dialog dialog = getDialog();//没初始化就会出现问题 if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } } catch (Exception ex) { ex.printStackTrace(); } }}
*欢迎star*
源码:点击下载
0 0
- DialogFragUtil 打造一款DialogFragment的统一封装类
- 基类Base和DialogFragment类封装的nice对话框
- 如何打造一款好的社区产品
- 如何打造一款出色的APP
- 如何打造一款五星级的 APP ?
- 如何打造一款成功的产品
- DialogFragment总结与封装
- dialogfragment链式调用封装
- 自定义DialogFragment的基类
- 打造一款成功的产品所需遵循的原则
- 一款漂亮的css3打造的卡哇伊按钮
- Android 打造风格统一的导航之actionBar
- Android 打造风格统一的导航之v7 ToolBar
- Android 利用Toolbar打造统一风格的标题栏
- 使用VirtualBox + Vagrant打造统一的开发环境
- Android 利用Toolbar打造统一风格的标题栏
- 徒手打造一款PK 名片全能王 的名片识别应用
- 徒手打造一款PK 名片全能王 的名片识别应用
- Codeforces Round #410 (Div. 2) Mike and gcd problem 思维
- 第十四届浙江省赛 ZOJ 3962 Seven Segment Display(数位DP)
- 排序算法02:选择排序
- Linux进程描述
- 用Python&OpenGL采用种子递归法填充汉字
- DialogFragUtil 打造一款DialogFragment的统一封装类
- samba服务器配置与常见的故障解决
- hdu3461 Code Lock (并查集+快速幂)
- 就比特币交易平台被盗事件引发的社会工程学的思考
- 六度分离理论在社会工程学中的应用
- JAVAString初始化的引用问题
- C++ cout执行顺序
- Unity人物换装打包2
- C语言复制文件的两种简单的方法【从根本解决问题】