import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
public class CustomDialog extends Dialog {
private Context mContext;
private int mHeight, mWidth;
private boolean mCanceledOnTouchOutside;
private boolean mCancelable;
private int mGravity;
private View mView;
private int mAnimation;
private float mDimAmount;
private CustomDialog(Builder builder) {
this(builder, R.style.DialogTheme);
}
private CustomDialog(Builder builder, int resStyle) {
super(builder.context, resStyle);
mContext = builder.context;
mHeight = builder.height;
mWidth = builder.width;
mDimAmount = builder.dimAmount;
mCancelable = builder.cancelable;
mCanceledOnTouchOutside = builder.canceledOnTouchOutside;
mGravity = builder.gravity;
mView = builder.contentView;
mAnimation = builder.animation;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mView);
setCancelable(mCancelable);
setCanceledOnTouchOutside(mCanceledOnTouchOutside);
Window window = getWindow();
if (window != null) {
window.setGravity(mGravity);
window.setDimAmount(mDimAmount);
window.setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), (Bitmap) null));
if (mAnimation > 0) {
window.setWindowAnimations(mAnimation);
}
WindowManager.LayoutParams layoutParams = window.getAttributes();
if (layoutParams != null) {
DisplayMetrics d = mContext.getResources().getDisplayMetrics();
if (mWidth != 0 && mHeight != 0) {
layoutParams.width = mWidth;
layoutParams.height = mHeight;
} else {
layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT;
layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT;
}
}
window.setAttributes(layoutParams);
}
}
@Override
public void dismiss() {
super.dismiss();
Window window = getWindow();
if (window != null) {
window.setDimAmount(1.0f);
}
}
public <T> T getView(int viewRes, Class<T> cls) {
if (mView != null) {
return (T) this.mView.findViewById(viewRes);
}
return null;
}
public static final class Builder {
private View contentView;
private int animation;
private Context context;
private int height, width;
private int resStyle = -1;
private float dimAmount = 0.5f;
private boolean cancelable = true;
private int gravity = Gravity.CENTER;
private boolean canceledOnTouchOutside = true;
public Builder(Context context) {
this.context = context;
}
public Builder setContentView(int resView) {
contentView = LayoutInflater.from(context).inflate(resView, null);
return this;
}
public Builder gravity(int val) {
gravity = val;
return this;
}
public Builder height(int val) {
height = val;
return this;
}
public Builder width(int val) {
width = val;
return this;
}
public Builder dimAmount(float val) {
dimAmount = val;
return this;
}
public Builder animation(int val) {
animation = val;
return this;
}
public Builder style(int resStyle) {
this.resStyle = resStyle;
return this;
}
public Builder canceledOnTouchOutside(boolean val) {
canceledOnTouchOutside = val;
return this;
}
public Builder cancelable(boolean val) {
cancelable = val;
return this;
}
public Builder addViewOnclick(int viewRes, View.OnClickListener listener) {
if (contentView != null && listener != null) {
contentView.findViewById(viewRes).setOnClickListener(listener);
}
return this;
}
public Builder setText(int viewRes, String message) {
if (contentView != null && !TextUtils.isEmpty(message)) {
View view = this.contentView.findViewById(viewRes);
if (view instanceof TextView) {
((TextView) view).setText(message);
}
}
return this;
}
public CustomDialog build() {
if (resStyle != -1) {
return new CustomDialog(this, resStyle);
} else {
return new CustomDialog(this);
}
}
}
}
<style name="DialogTheme" parent="android:style/Theme.Dialog">
<!--背景顏色及和透明程度-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--是否去除標題 -->
<item name="android:windowNoTitle">true</item>
<!--是否去除邊框-->
<item name="android:windowFrame">@null</item>
<!--是否浮現在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--是否模糊-->
<item name="android:backgroundDimEnabled">true</item>
<item name="android:background">@android:color/transparent</item>
<!-- 半透明-->
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>