Android自定义dialog
来源:互联网 发布:opengl编程指南 第9版 编辑:程序博客网 时间:2024/06/07 18:04
自定义Dialog
今天些项目的时候用到了一些dialog,记得以前写过一些自定义的dialog,今天总结了一下:总体上就在Android系统提供的dialog上添加不同的布局,然后实现他们的各种点击事件。
1.下面开始添加代码:
自定义dialog(没有添加布局)
public class CustomDialog { private Dialog dialog = null; private Activity mActivity; public CustomDialog(Context context) { this.mActivity = (Activity) context; } private CustomDialog create() { create(themeID); return this; } /** * 根据对话框主题设置对话框 * * @param theme * @return */ public CustomDialog create(int theme) { if (null == dialog && mActivity.isFinishing() == false) { dialog = new Dialog(mActivity, theme); } return this; } /** * 根据布局id设置布局 * * @param layoutResId * @return */ public CustomDialog setContentView(int layoutResId) { if (null == dialog) { create(); } dialog.setContentView(layoutResId); return this; } /** * 设置对话框布局,对话框展示的位置居中,大小自适应 * * @param view * @return */ public CustomDialog setContentView(View view) { setContentView(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, Gravity.CENTER); return this; } /** * 设置对话框布局,对话框位置gravity,大小自适应 * * @param view * @param gravity * @return */ public CustomDialog setContentView(View view, int gravity) { setContentView(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, gravity); return this; } /** * 设置对话框布局,大小,显示位置 * * @param view * @param width * @param height * @param gravity * @return */ public CustomDialog setContentView(View view, int width, int height, int gravity) { if (null == dialog) { create(); } dialog.setContentView(view); Window dlgWindow = dialog.getWindow(); WindowManager.LayoutParams wl = dlgWindow.getAttributes(); wl.width = width; wl.height = height; dlgWindow.setGravity(gravity); dlgWindow.setAttributes(wl); return this; } /** * 设置对话框是否允许外部点击取消 * * @param cancel * @return */ public CustomDialog setCanceledOnTouchOutside(boolean cancel) { if (null == dialog) { create(); } dialog.setCanceledOnTouchOutside(cancel); return this; } /** * 设置是否允许取消 * * @param isCancel * @return */ public CustomDialog setCancelable(boolean isCancel) { if (null == dialog) { create(); } dialog.setCancelable(isCancel); return this; } /** * 设置对话框取消监听 * * @param listener * @return */ public CustomDialog OnDismissListener(DialogInterface.OnDismissListener listener) { if (null == dialog) { create(); } if (null != listener) { dialog.setOnDismissListener(listener); } return this; } /** * 设置动画功能 * * @param resId * @return */ public CustomDialog setAnimations(int resId) { if (null == dialog) { create(); } dialog.getWindow().setWindowAnimations(resId); return this; } /** * 设置对话框显示监听 * * @param listener * @return */ public CustomDialog setOnShowListener(DialogInterface.OnShowListener listener) { if (null == dialog) { create(); } if (null != listener) { dialog.setOnShowListener(listener); } return this; } /** * 显示对话框 */ public void show() { // 如果没有最后一个条件,三星手机会挂掉 if (null != dialog && dialog.isShowing() == false && !mActivity.isFinishing()) { dialog.show(); } } /** * 关闭对话框 */ public void dismiss() { // 如果没有最后一个条件,三星手机会挂掉 if (null != dialog && dialog.isShowing() == false && !mActivity.isFinishing()) { dialog.dismiss(); } } /** * 对话框是否显示 * * @return */ public boolean isShowing() { if (null == dialog) return false; return dialog.isShowing(); }}
2.添加自定义布局
public class BaseDialog { protected CustomDialog dialog = null; protected Context context; protected LayoutInflater inflater; private Button btLeft, btRight; public Button getBtLeft() { return btLeft; } public Button getBtRight() { return btRight; } public TextView getTvTitle() { return tvTitle; } public LinearLayout getLinContext() { return linContext; } public LinearLayout getLinFunction() { return linFunction; } public View getvLineFunction() { return vLineFunction; } private TextView tvTitle; private LinearLayout linContext, linFunction; private View vLineFunction; /** * 添加内容布局 * @param view */ public void addContentView(View view) { linContext.removeAllViews(); linContext.addView(view); } public BaseDialog(Context context) { this.context = context; inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); init(context); } private void init(Context context) { View dialogView = inflater.inflate(R.layout.dialog_base, null); tvTitle = (TextView) dialogView.findViewById(R.id.dlg_base_txtTitle); linContext = (LinearLayout) dialogView.findViewById(R.id.dlg_base_linContent); linFunction = (LinearLayout) dialogView.findViewById(R.id.dlg_base_linFunction); btLeft = (Button) dialogView.findViewById(R.id.dlg_base_btnLeft); btRight = (Button) dialogView.findViewById(R.id.dlg_base_btnRight); btRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); dialog = new CustomDialog(context).setContentView(dialogView, Gravity.CENTER).setCanceledOnTouchOutside(false); } public void show() { if (null != dialog) { dialog.show(); } } public void dismiss() { if (null != dialog) { dialog.dismiss(); } } public boolean isShow() { return dialog.isShowing(); }}
3.需要什么布局和点击事件,可以自己添加
1 0
- 自定义Dialog android Dialog
- 【Android】Dialog以及自定义Dialog
- android 系统Dialog,自定义Dialog
- android 自定义dialog 自定义dialog 宽度问题
- Android 自定义 dialog
- Android 自定义 dialog
- Android 自定义 dialog
- Android 自定义Dialog分类
- Android Dialog( 自定义对话框)
- Android自定义Dialog
- Android-自定义Dialog样式
- Android 自定义Dialog样式
- Android:自定义dialog
- Android 自定义dialog
- Android自定义Dialog对话框
- Android 自定义dialog
- Android自定义Dialog
- Android自定义Dialog
- Leetcode 257. Binary Tree Paths
- redis学习笔记(2)---链表adlist
- 基本百度地图制作
- java笔记→递归算法、枚举法、辗转相除法
- 刚开博客,水的开始!
- Android自定义dialog
- const用法
- 文章标题
- php字符串操作
- 陶哲轩实分析 附录 A 习题解答
- leetcode67:Add Binary
- MyEclipse中开发web项目遇到的一些问题
- LeetCode-58.Length of Last Word
- 关于回调函数的一些理解