1.首先介绍我们的baseDialog,自定义常用的监听方法positive、negative。以及构造函数,自定义了两个构造函数,根据自己的需要是否添加监听事件实现dialog方法,getDialogStyleId方法是加载自定义dialog样式,在style文件中加载写入。
见如下代码:
import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.view.Display; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.LinearLayout; /** * Created by JackZheng on 16/11/9. */ public abstract class BaseDialog { public OnBaseDialogListener baseDialogListener; //定义回调事件,用于dialog的点击事件 public interface OnBaseDialogListener { void positive(); void negative(); } //这些属性,Context 是肯定要的,基本对话框要用它 protected Context context; private Display display;//这个设置显示属性用的 private Dialog dialog;//自定义Dialog,Dialog还是要有一个的吧 //对话框布局的样式ID (通过这个抽象方法,我们可以给不同的对话框设置不同样式主题) protected abstract int getDialogStyleId(); //构建对话框的方法(都说了是不同的对话框,布局什么的肯定是不一样的) protected abstract View getView(); //构造方法 来实现 最基本的对话框 public BaseDialog(Context context) { this.context = context; initView(); } public BaseDialog(Context context, OnBaseDialogListener baseDialogListener) { this.baseDialogListener = baseDialogListener; this.context = context; initView(); } /** * 初始化 视图 */ private void initView() { WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); display = windowManager.getDefaultDisplay(); //在这里初始化 基础对话框s if (getDialogStyleId() == 0) { dialog = new Dialog(context, Dialog.BUTTON_POSITIVE); } else { dialog = new Dialog(context, getDialogStyleId()); } View view = getView(); // 调整dialog背景大小 view.setLayoutParams(new FrameLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); dialog.addContentView(view, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); //dialog.getWindow().setLayout(600, 400);//设置 宽高 dialog.setContentView(view); } /** * Dialog 的基础方法, 凡是要用的就在这写出来,然后直接用对话框调本来的方法就好了,不够自己加~hhh * 像这类设置对话框属性的方法,就返回值写自己,这样就可以一条链式设置了 */ public BaseDialog setCancelable(boolean cancel) { dialog.setCancelable(cancel); return this; } public void show() { dialog.show(); } public void dismiss() { if (isShowing()) dialog.dismiss(); } public boolean isShowing() { return dialog.isShowing(); } }2.写我们自定义的dialog,首先我们需要继承BaseDialog,然后有自己的布局文件,还有自己的dialog样式,在这里我写了三个构造函数,根据自己的需要是否自定义标题输入文本之类的自己选择。同样继承父类的想对应方法;getDialogStyleId():获取自定义dialog样式;getView()获取自定义layout布局文件;还有就是简单的加载自定义文字方法。
如下代码:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import com.sudiyi.apps.xiaoht.R; import com.sudiyi.apps.xiaoht.base.BaseDialog; /** * Created by JackZheng on 16/11/9. * 加载 dialog */ public class SureOrCancelDialog extends BaseDialog { private TextView mTvCancel;//取消 private TextView mTvSure;//确定 private TextView mTvTitle;//标题 public SureOrCancelDialog(Context context) { super(context); } public SureOrCancelDialog(Context context, OnBaseDialogListener onBaseDialogListener) { super(context, onBaseDialogListener); } /** * @param context 上下文 * @param onBaseDialogListener 回调监听 * @param cancelName 自定义取消名字 * @param sureName 自定义确定名字 * @param title 自定义title */ public SureOrCancelDialog(Context context, OnBaseDialogListener onBaseDialogListener, String title, String cancelName, String sureName) { super(context, onBaseDialogListener); setCancelName(cancelName); setSureName(sureName); setTitleName(title); } //设置对话框的样式 @Override protected int getDialogStyleId() { return R.style.Dialog; } //继承于BaseDialog的方法,设置布局用的,这样对话框张啥样久随心所欲啦 @Override protected View getView() { // 获取Dialog布局 View view = LayoutInflater.from(context).inflate(R.layout.sure_or_cancel_dialog, null); //得到各种 mTvCancel = (TextView) view.findViewById(R.id.tv_cancel); mTvSure = (TextView) view.findViewById(R.id.tv_sure); mTvTitle = (TextView) view.findViewById(R.id.tv_title); if (baseDialogListener != null) { mTvCancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { baseDialogListener.negative(); dismiss(); } }); mTvSure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { baseDialogListener.positive(); dismiss(); } }); } return view; } /** * 设置取消名字 * * @param string * @return */ public BaseDialog setCancelName(String string) { mTvCancel.setText(string); return this; } /** * 设置确定名字 * * @param string * @return */ public BaseDialog setSureName(String string) { mTvSure.setText(string); return this; } /** * 设置标题名字 * * @param string * @return */ public BaseDialog setTitleName(String string) { mTvTitle.setText(string); return this; } }3.最后贴上我自己使用的dialog的style
<!--自定义dialog 样式--> <style name="Dialog" parent="android:style/Theme.Dialog"> <item name="android:background">#00000000</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowCloseOnTouchOutside">false</item><!--点击屏幕是否消失-->
4.附上我自己自定义的布局文件sure_or_cancel_dialog
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@drawable/bg_dialog" android:orientation="vertical"> <LinearLayout android:layout_width="260dp" android:layout_height="140dp" android:orientation="vertical"> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="4" android:gravity="center" android:textColor="@color/black" android:textSize="@dimen/text_size_middle" android:textStyle="bold" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:background="@color/divider" /> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="3" android:orientation="horizontal"> <TextView android:id="@+id/tv_cancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/sel_dialog_pressed" android:gravity="center" android:textColor="@color/color_cancel" android:textSize="@dimen/text_size_upper_middle" android:textStyle="bold" /> <View android:layout_width="0.5dp" android:layout_height="match_parent" android:background="@color/divider" /> <TextView android:id="@+id/tv_sure" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/sel_dialog_pressed" android:gravity="center" android:textColor="@color/color_sure" android:textSize="@dimen/text_size_upper_middle" android:textStyle="bold" /> </LinearLayout> </LinearLayout> </LinearLayout>5.调用方法如下
SureOrCancelDialog deleteAddressTwoDialog = new SureOrCancelDialog(SearchActivity.this, new BaseDialog.OnBaseDialogListener() { @Override public void positive() { } @Override public void negative() { } }, "确认将这个常用地址删除?", "取消", "确定");deleteAddressTwoDialog.setCancelable(true).show();
6.效果图如下:
ok,那么到这里呢,我们的文章就已经结束了,欢迎你的关注,如有什么疑问,可以直接回复我,我会在最快的时间回复你。