代码展示
import android.content.Context;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.ustcsoft.cartoonview.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by sunxunchao on 2018/1/15.
*/
public class CustomDialog {
private AlertDialog.Builder builder;
private AlertDialog dialog;
private View view;
private CustomDialog(Context context, @LayoutRes int layoutId) {
builder = new AlertDialog.Builder(context, R.style.comment_dialog);
view = LayoutInflater.from(context).inflate(layoutId, null);
builder.setView(view);
dialog = builder.create();
}
private void setOnClick(@IdRes int id, View.OnClickListener l) {
if (view != null) {
view.findViewById(id).setOnClickListener(l);
}
}
private void setContent(String content, @IdRes int id) {
if (view != null) {
View contentView = view.findViewById(id);
if (contentView instanceof TextView) {
((TextView) contentView).setText(String.valueOf(content));
}
}
}
public void show() {
if (dialog != null && !dialog.isShowing()) {
dialog.show();
}
}
public void dismiss() {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
}
public static class Builder {
private Context context;
private int layoutId;
private String content;
private int contentId;
private List<Integer> clickIds;
private List<View.OnClickListener> onClickListeners;
public Builder(Context context) {
this.context = context;
clickIds = new ArrayList<>();
onClickListeners = new ArrayList<>();
}
public Builder setContent(@IdRes int contentId, String content) {
this.content = content;
this.contentId = contentId;
return this;
}
public Builder setOnClick(@IdRes int clickId, View.OnClickListener onClickListener) {
if (clickIds.indexOf(clickId) == -1){
this.clickIds.add(clickId);
this.onClickListeners.add(onClickListener);
}
return this;
}
public Builder setView(@LayoutRes int layoutId) {
this.layoutId = layoutId;
return this;
}
public CustomDialog create() {
CustomDialog customDialog = new CustomDialog(context, layoutId);
customDialog.setContent(content, contentId);
for (int i = 0; i < clickIds.size(); i++) {
if (onClickListeners.size() == clickIds.size() && onClickListeners.get(i) != null) {
customDialog.setOnClick(clickIds.get(i), onClickListeners.get(i));
}
}
return customDialog;
}
}
}
样式
<style name="comment_dialog" parent="android:Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:backgroundDimEnabled">true</item>
</style>
使用方式
CustomDialog dialog = new CustomDialog.Builder(getActivity()) .setView(R.layout.dialog_sign_up) .setContent(R.id.dialog_message_tv,"内容") .setOnClick(R.id.btn1, new View.OnClickListener() { @Override public void onClick(View v) { ToastUtil.showLong(getActivity(),"1"); } }) .setOnClick(R.id.btn2, new View.OnClickListener() { @Override public void onClick(View v) { ToastUtil.showLong(getActivity(),"2"); } }) .setOnClick(R.id.btn3, new View.OnClickListener() { @Override public void onClick(View v) { ToastUtil.showLong(getActivity(),"3"); } }) .create(); dialog.show();