在app开发中,为了良好的用户体验,我们经常会用到提示框,下面介绍一下自己在项目中封装的dialog
封装实现了链式调用,可以动态设置标题、提示内容、取消按钮、确定按钮的内容及颜色
最后是style
首先贴出自定义dialog的布局
<?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/kuang_white" android:gravity="center" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="20dp"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="提示" android:maxLines="1" android:textColor="#323232" android:textSize="18sp" /> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="提示内容" android:textColor="@color/Cr_333333" android:textSize="15sp" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="#d5d6d7" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <TextView android:id="@+id/not" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:paddingBottom="15dp" android:paddingTop="15dp" android:text="取消" android:textColor="@color/textColor_alert_button_cancel" android:textSize="17sp" /> <View android:layout_width="0.5dp" android:layout_height="match_parent" android:background="#e5e5e5" /> <TextView android:id="@+id/ok" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:paddingBottom="15dp" android:paddingTop="15dp" android:text="确定" android:textColor="@color/textColor_alert_button_destructive" android:textSize="17sp" /> </LinearLayout> </LinearLayout> 然后是具体的dialog实现类
public class CustomizeDialog extends Dialog { private boolean isShowNot=true;//标记是否显示取消按钮,默认显示 private TextView tv_title,tv_content,not,ok; private OnButtonClickListener onButtonClickListener;
public CustomizeDialog(Context context) { super(context, R.style.DialogStyle); }public CustomizeDialog(Context context, boolean isShowNot) {
super(context, R.style.DialogStyle);
this.isShowNot = isShowNot;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.reminder_dialog);
initView();
if (!isShowNot)
not.setVisibility(View.GONE);
initListener();
getWindow().setWindowAnimations(R.style.login_pop); } public static CustomizeDialog getInstance(Context context, boolean isShowNot) { return new CustomizeDialog(context,isShowNot).showDialog(); } private void initListener() { ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onButtonClickListener!=null) { onButtonClickListener.onClickOk(); dismiss(); } } }); not.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onButtonClickListener!=null) { onButtonClickListener.onClickNot(); dismiss(); } } }); } private void initView() { tv_title = (TextView) findViewById(R.id.title); tv_content = (TextView) findViewById(R.id.content); not = (TextView) findViewById(R.id.not); ok = (TextView) findViewById(R.id.ok); } public interface OnButtonClickListener { void onClickOk(); void onClickNot(); } public CustomizeDialog setTitle(String title) { tv_title.setText(title); return this; } public CustomizeDialog setContent(String content) { tv_content.setText(content); return this; } public CustomizeDialog setNot(String notButtonTitle) { not.setText(notButtonTitle); return this; } public CustomizeDialog setOK(String okButtonTitle) { ok.setText(okButtonTitle); return this; } public CustomizeDialog showDialog() { this.show(); return this; } public CustomizeDialog setTitleColor(int color) { tv_title.setTextColor(color); return this; } public CustomizeDialog setContentColor(int color) { tv_content.setTextColor(color); return this; } public CustomizeDialog setNotTextColor(int color) { not.setTextColor(color); return this; } public CustomizeDialog setOkTextColor(int color) { ok.setTextColor(color); return this; } public CustomizeDialog setOnButtonClickListener(OnButtonClickListener onButtonClickListener) { this.onButtonClickListener = onButtonClickListener; return this; } }
封装实现了链式调用,可以动态设置标题、提示内容、取消按钮、确定按钮的内容及颜色
最后是style
<style name="DialogStyle" parent="android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:background">#00000000</item> <item name="android:windowEnterAnimation">@anim/dialog_fade_in</item> <item name="android:windowExitAnimation">@anim/dialog_fade_out</item> <item name="android:windowBackground">@android:color/transparent</item> </style>
<style name="login_pop" parent="android:Animation.Dialog"> <item name="android:windowEnterAnimation">@anim/anim_fade_in</item> <item name="android:windowExitAnimation">@anim/anim_fade_out</item> </style>/------------------------------------------------------------------- @anim/dialog_fade_in---------------------/
<set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="500" android:fromAlpha="0.0" android:interpolator="@android:anim/decelerate_interpolator" android:toAlpha="1.0" /> </set>/---------------------------------- @anim/dialog_fade_out---------------------/
<set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:duration="500" android:fromAlpha="1.0" android:interpolator="@android:anim/decelerate_interpolator" android:toAlpha="0.0" /> </set>
调用示例:
CustomizeDialog.getInstance(mContext)
.setTitle("自定义title")
.setContent("自定义内容")
.setNot("取消按钮内容")
.setOk("确定按钮内容")
.setOnButtonClickListener(new CustomizeDialog.OnButtonClickListener() { @Override public void onClickOk() { } @Override public void onClickNot() { } });