效果图
自定义dialog
public class TipsDialog extends Dialog {
private View mContentView;
private TextView tv_title, tv_message, tv_cancel, tv_commit;
public TipsDialog(@NonNull Context context) {
super(context, R.style.Dialog);
init(context);
}
public TipsDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
init(context);
}
protected TipsDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
init(context);
}
private void init(Context context) {
mContentView = LayoutInflater.from(context).inflate(R.layout.tips_dialog, null, false);
tv_title = (TextView) mContentView.findViewById(R.id.tv_title);
tv_message = (TextView) mContentView.findViewById(R.id.tv_message);
tv_commit = (TextView) mContentView.findViewById(R.id.tv_sure);
tv_cancel = (TextView) mContentView.findViewById(R.id.tv_cancel);
setContentView(mContentView);
}
private void setTitle(String title) {
tv_title.setVisibility(View.VISIBLE);
tv_title.setText(title);
}
private void setMessage(String message) {
tv_message.setText(message);
}
private void setPositiveButton(String commitStr, final View.OnClickListener onClickListener) {
tv_commit.setText(commitStr);
tv_commit.setOnClickListener(onClickListener);
}
private void setNegativeButton(String cancelStr, final View.OnClickListener onClickListener) {
tv_cancel.setText(cancelStr);
tv_cancel.setOnClickListener(onClickListener);
}
public static class Builder {
private Context mContext;
private TipsDialog mDialog;
public Builder(Context context) {
mContext = context;
mDialog = new TipsDialog(context);
}
public Builder setTitle(String title) {
mDialog.setTitle(title);
return this;
}
public Builder setMessage(String message) {
mDialog.setMessage(message);
return this;
}
public Builder setCommit(String commitStr, final OnClickListener onClickListener) {
mDialog.setPositiveButton(commitStr, new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onClickListener != null) {
onClickListener.onClick(Builder.this);
}
}
});
return this;
}
public Builder setCancel(String cancelStr, final OnClickListener onClickListener) {
mDialog.setNegativeButton(cancelStr, new View.OnClickListener() {
@Override
public void onClick(View view) {
if (onClickListener != null) {
onClickListener.onClick(Builder.this);
}
}
});
return this;
}
public Builder setCancelable(boolean cancelable) {
mDialog.setCancelable(cancelable);
return this;
}
public void show() {
mDialog.show();
}
public void dismiss() {
if (mDialog != null) {
mDialog.dismiss();
mDialog = null;
}
}
public Dialog getDialog() {
return mDialog;
}
}
public interface OnClickListener {
void onClick(Builder builder);
}
}
styles.xml文件定义样式
<style name="Dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<!--边框-->
<item name="android:windowIsFloating">true</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsTranslucent">false</item>
<!--半透明-->
<item name="android:windowNoTitle">true</item>
<!--无标题-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--背景透明-->
<item name="android:backgroundDimEnabled">true</item>
<!--模糊-->
</style>
layout布局文件
<?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:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/bg_yuanjiao_white24"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
android:gravity="center"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
android:visibility="gone" />
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
android:gravity="center"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
android:layout_height="1.0dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="40dp"
android:layout_marginRight="20dp"
android:background="#eeeeee" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:gravity="center"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center">
<TextView
android:id="@+id/tv_cancel"
android:layout_width="138dp"
android:layout_height="@dimen/dp_45"
android:background="@drawable/bg_tuoyuan_grey"
android:gravity="center"
android:textColor="#232321"
android:textSize="13sp" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center">
<TextView
android:id="@+id/tv_sure"
android:layout_width="138dp"
android:layout_height="45dp"
android:background="@drawable/bg_tuoyuan_red"
android:gravity="center"
android:textColor="@color/white"
android:textSize="13sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
drawable文件
1.bg_yuanjiao_white24
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- rectangle表示为矩形 -->
<!-- 填充的颜色 -->
<solid android:color="@color/white" />
<!-- android:radius 圆角的半径 -->
<corners android:radius="24dp" />
</shape>
2.bg_tuoyuan_grey
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- view背景色 -->
<solid android:color="@color/white" />
<!-- 边框圆角 -->
<corners android:radius="180px" />
<stroke android:color="#EEEEEE" android:width="1dp"/>
</shape>
3.bg_tuoyuan_red
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- view背景色 -->
<solid android:color="#ff4444" />
<!-- 边框圆角 -->
<corners android:radius="180px" />
<stroke android:color="#ff4444" android:width="1dp"/>
</shape>
dialog使用
private void tipsDialog() {
TipsDialog.Builder builder = new TipsDialog.Builder(mContext);
builder.setCommit("同意", new TipsDialog.OnClickListener() {
@Override
public void onClick(TipsDialog.Builder builder) {
//确认后操作
}
});
builder.setCancel("不同意", new TipsDialog.OnClickListener() {
@Override
public void onClick(TipsDialog.Builder builder) {
//取消
builder.getDialog().dismiss();
}
});
builder.getDialog().setCanceledOnTouchOutside(false);
builder.show();
}