您的位置:首页 > 移动开发 > Android开发

Android自定义dialog

2016-05-03 20:03 471 查看

自定义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.需要什么布局和点击事件,可以自己添加

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: