自定义Dialog经常用到,这里记录一下。前面陈列一下需要做的准备工作,最后一步是使用方式。
----------------------------------------------------------------------------------------------------------------
<style name="MyDialog" parent="@style/Theme.AppCompat.Dialog"> <!-- 背景颜色及透明程度 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 是否有标题 --> <item name="android:windowNoTitle">true</item> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <!-- 是否模糊 --> <item name="android:backgroundDimEnabled">true</item> </style>----------------------------------------------------------------------------------------------------------------
package com.unipus.view; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.TextView; public class CommonDialog extends Dialog implements View.OnClickListener { TextView textTitle; TextView textContent; TextView textCancel; TextView textOk; private Context mContext; private int layoutId; private String content; private OnCloseListener listener; private String positiveName; private String negativeName; private String title; private boolean titleVisible = true; private boolean cancelVisible = true; public CommonDialog(Context context) { super(context); this.mContext = context; } public CommonDialog(Context context, int themeResId, String content) { super(context, themeResId); this.mContext = context; this.content = content; } public CommonDialog(Context context, int themeResId, OnCloseListener listener) { super(context, themeResId); this.mContext = context; this.listener = listener; } public CommonDialog(Context context, int layoutId, int themeResId, OnCloseListener listener) { super(context, themeResId); this.mContext = context; this.layoutId = layoutId; this.listener = listener; } public CommonDialog(Context context, int themeResId, String content, OnCloseListener listener) { super(context, themeResId); this.mContext = context; this.content = content; this.listener = listener; } public CommonDialog(Context context, int themeResId, String title, String content, OnCloseListener listener) { super(context, themeResId); this.mContext = context; this.title = title; this.content = content; this.listener = listener; } protected CommonDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); this.mContext = context; } public CommonDialog setTitle(String title) { this.title = title; return this; } public CommonDialog setTitleVisible(boolean show) { this.titleVisible = show; return this; } public CommonDialog setCancelVisible(boolean show) { this.cancelVisible = show; return this; } public CommonDialog setContent(String content) { this.content = content; return this; } public CommonDialog setPositiveButton(String name) { this.positiveName = name; return this; } public CommonDialog setNegativeButton(String name) { this.negativeName = name; return this; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (layoutId != 0) { setContentView(layoutId); } else { setContentView(R.layout.dialog_common_1); } setCanceledOnTouchOutside(true); initView(); } private void initView() { textContent = (TextView) findViewById(R.id.content); textTitle = (TextView) findViewById(R.id.title); textOk = (TextView) findViewById(R.id.text_ok); textCancel = (TextView) findViewById(R.id.text_cancel); textCancel.setOnClickListener(this); textOk.setOnClickListener(this); if (titleVisible) { textTitle.setVisibility(View.VISIBLE); } else { textTitle.setVisibility(View.GONE); } if (cancelVisible) { textCancel.setVisibility(View.VISIBLE); } else { textCancel.setVisibility(View.GONE); } if (!TextUtils.isEmpty(title)) { textTitle.setText(title); } if (!TextUtils.isEmpty(content)) { textContent.setText(content); } if (!TextUtils.isEmpty(positiveName)) { textOk.setText(positiveName); } if (!TextUtils.isEmpty(negativeName)) { textCancel.setText(negativeName); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.text_cancel: if (listener != null) { // listener.onClick(this, false); } this.dismiss(); break; case R.id.text_ok: if (listener != null) { listener.onClick(this, true); this.dismiss(); } break; } } public interface OnCloseListener { void onClick(Dialog dialog, boolean confirm); } }------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bg_round_white" android:orientation="vertical" android:padding="20dp" > <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textColor="@color/color_FF333333" android:textSize="@dimen/large" android:visibility="gone" /> <TextView android:id="@+id/content" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center" android:textColor="@color/color_FF333333" android:textSize="@dimen/medium" /> <TextView android:id="@+id/text_cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:background="@mipmap/background_gray" android:gravity="center" android:padding="10dp" android:text="取消" android:textColor="@color/color_FF333333" android:visibility="visible" /> <TextView android:id="@+id/text_ok" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:background="@mipmap/background_authentication_primary" android:gravity="center" android:padding="10dp" android:text="确定" android:textColor="@color/color_FFFFFFFF" /> </LinearLayout> ------------------------------------------------------------------------------------------------------------------------------------ <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/color_FFFFFFFF" /> <corners android:radius="5dp" /> </shape>------------------------------------------------------------------------------------------------------------------------------------
使用:
new CommonDialog(getActivity(), R.style.MyDialog, new CommonDialog.OnCloseListener() { @Override public void onClick(Dialog dialog, boolean confirm) { //To do what you want } }).setTitle(" 我是标题").setContent("我是内容").show();
可以设置标题,内容,按钮文字,一个按钮或两个按钮,这些都可以通过链式方式设置。
