app开发肯定少不了各种样式的弹窗,这里分享一个自己一直在用的自定义dialog弹窗,简化了创建dialog里重复操作。
先上代码
public class CustomDialog extends Dialog {
private MyDialogListener listener;//外部设置的监听回调
private int dialogId = -1;//通过dialogId 区分同一页面多个弹窗
private DialogOnClickListener onClickListener = new DialogOnClickListener();//implements实现View.OnClickListener
private ViewGroup contentView;//dialog的布局对象
public CustomDialog(Context context) {
super(context);
}
public CustomDialog(@NonNull Context context, @StyleRes int themeResId) {
super(context, themeResId);
}
public void setTextViewText(int id, String text) {
TextView tv = contentView.findViewById(id);
if (tv != null)
tv.setText(text);
}
public void setTextViewSize(int id, int size) {
TextView tv = contentView.findViewById(id);
if (tv != null)
tv.setTextSize(size);
}
public void setTextViewText(int id, SpannableString text) {
TextView tv = contentView.findViewById(id);
if (tv != null)
tv.setText(text);
}
public void setTvLineSpacing(int id, int dp) {
TextView tv = contentView.findViewById(id);
if (tv != null)
tv.setLineSpacing(dp, 1);
}
public void setImageView(int id, int resId) {
ImageView iv = contentView.findViewById(id);
iv.setImageResource(resId);
}
public void setTextColor(int id, int color) {
TextView tv = contentView.findViewById(id);
if (tv != null)
tv.setTextColor(color);
}
public void setViewVisible(int id, int visible) {
contentView.findViewById(id).setVisibility(visible);
}
public void setViewVisible(int id, boolean visible) {
contentView.findViewById(id).setVisibility(visible ? View.VISIBLE : View.GONE);
}
public void setDialogId(int dialogId) {
this.dialogId = dialogId;
}
private void setRootView(ViewGroup viewGroup) {
this.contentView = viewGroup;
setContentView(viewGroup);
}
/**
* 遍历根布局 给每个有id的控件添加点击监听
*
* @param view
*/
private void traverseParent(View view) {
if (view instanceof ViewGroup) {
if (view instanceof ViewPager) {
if (view.getId() != -1) {
addViewClick(view);
}
} else {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
if (((ViewGroup) view).getChildAt(i).getId() != -1) {
addViewClick(((ViewGroup) view).getChildAt(i));
}
if (((ViewGroup) view).getChildAt(i) instanceof ViewGroup) {
traverseParent(((ViewGroup) view).getChildAt(i));
}
}
}
} else {
if (view.getId() != -1) {
addViewClick(view);
}
}
}
public View findViewById(int id) {
return contentView.findViewById(id);
}
private void addViewClick(View view) {
view.setOnClickListener(onClickListener);
}
public int getDialogId() {
return dialogId;
}
/**
* dialog的按钮监听回调
*/
public interface MyDialogListener {
void onClick(View view, int dialogId, CustomDialog dialog);
}
public void setDialogListener(MyDialogListener listener) {
this.listener = listener;
}
private class DialogOnClickListener implements View.OnClickListener {