自定义BaseDialog,继承BaseDialog实现自己想要的功能。

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,那么到这里呢,我们的文章就已经结束了,欢迎你的关注,如有什么疑问,可以直接回复我,我会在最快的时间回复你。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值