1.主要代碼:
public abstract class CommonConfirmBaseDialog extends AlertDialog {
// protected Context mContext;
protected WeakReference<Context> weakReference;
protected View mContentView;
protected TextView tvCancel;
protected TextView tvConfirm;
private FrameLayout flContainer;
protected View mCustomView;
public ImageView iv_colse;
protected CommonConfirmBaseDialog(Context context) {
super(context, R.style.dialog_bond);
if (context instanceof Application)
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// mContext = context;
weakReference = new WeakReference<>(context);
}
protected CommonConfirmBaseDialog(Context context) {
super(context, R.style.dialog_bond);
if (context instanceof Application)
getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
// mContext = context;
weakReference = new WeakReference<>(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContentView = LayoutInflater.from(obtainContext()).inflate(R.layout.layout_common_confirm_base_dialog, null);
initViews();
Window window = getWindow();
window.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams lp = window.getAttributes();
lp.gravity = Gravity.CENTER;
// lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.width = getScreenWidth() - dp2px(66);
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(lp);
setCancelable(false);
setCanceledOnTouchOutside(false);
setContentView(mContentView);
}
private void initViews() {
flContainer = (FrameLayout) mContentView.findViewById(R.id.fl_container);
iv_colse = (ImageView) mContentView.findViewById(R.id.iv_colse);
tvCancel = (TextView) mContentView.findViewById(R.id.tv_cancel);
tvConfirm = (TextView) mContentView.findViewById(R.id.tv_confirm);
tvConfirm.setText("確定");
tvCancel.setText("取消");
mCustomView = customView();
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_HORIZONTAL;
mCustomView.setLayoutParams(params);
if (mCustomView != null) {
flContainer.addView(mCustomView);
}
iv_colse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dismiss();
}
});
tvConfirm.setOnClickListener(v -> {
dismiss();
if (mAction != null)
mAction.confirm(this);
});
tvCancel.setOnClickListener(v -> {
dismiss();
if (mAction != null)
mAction.cancel(this);
});
bindEvent();
}
tvConfirm.setOnClickListener(v -> {
dismiss();
if (mAction != null)
mAction.confirm(this);
});
tvCancel.setOnClickListener(v -> {
dismiss();
if (mAction != null)
mAction.cancel(this);
});
bindEvent();
}
public CommonConfirmBaseDialog cancelText(String text) {
tvCancel.setText(text);
return this;
}
public CommonConfirmBaseDialog action(ConfrimAction action) {
mAction = action;
return this;
}
public static interface ConfrimAction {
void confirm(CommonConfirmBaseDialog baseDialog);
void cancel(CommonConfirmBaseDialog baseDialog);
}
public CommonConfirmBaseDialog hideCance() {
tvCancel.setVisibility(View.GONE);
return this;
}
public CommonConfirmBaseDialog hideConfirm() {
tvConfirm.setVisibility(View.GONE);
return this;
}
public CommonConfirmBaseDialog hideClose() {
iv_colse.setVisibility(View.GONE);
return this;
}
}
2.佈局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_colse"
android:layout_gravity="right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pop_close" />
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="10dp"
android:layout_marginTop="20dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_marginTop="20dp"
android:gravity="center_horizontal">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="94dp"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:layout_marginRight="28dp"
android:background="@drawable/bg_dialog_cancel"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/dialog_cancel_text"
android:visibility="visible" />
<TextView
android:id="@+id/tv_confirm"
android:layout_width="94dp"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/bg_dialog_confirm"
android:gravity="center"
android:text="@string/confirm"
android:textColor="@color/text_chat_text_right" />
</LinearLayout>
</LinearLayout>
3.代碼中引用其他地方的方法:
public static int getScreenWidth() {
WindowManager wm = (WindowManager) Utils.getApp().getSystemService(Context.WINDOW_SERVICE);
Point point = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
//noinspection ConstantConditions
wm.getDefaultDisplay().getRealSize(point);
} else {
//noinspection ConstantConditions
wm.getDefaultDisplay().getSize(point);
}
return point.x;
}
public static int dp2px( float dpVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, InterpHone.getContext().getResources().getDisplayMetrics());
}
4.styles.xml:
<style name="dialog_bond" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsFloating">true</item>
</style>