BaseDialog封装

package com.-
---.dialog;

import android.app.Dialog;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.view.LayoutInflater;
import android.view.Window;
import android.view.WindowManager;

import com.czb.czbpos.R;

/**
 * Created by Administrator on 2016/5/5.
 */
public abstract class BaseDialog<T extends ViewDataBinding> extends Dialog {

    /**
     * binding ,用于子类继承
     */
    protected T mBinding;

    public enum AnimationDirection {
        HORIZONTAL, VERTICLE, GROW
    }

    /**
     * 创建dialog 的方法, 省略了一些参数,只需要
     *
     * @param context           上下文
     * @param gravity           对齐方式
     * @param backCancelable    返回键是否可以取消
     * @param outsideCancelable 外部点击是否可以取消
     */
    protected BaseDialog(Context context, int gravity, boolean backCancelable, boolean outsideCancelable) {
        this(context, gravity, 0.0f, AnimationDirection.GROW, backCancelable, outsideCancelable);
    }

    /**
     * 创建dialog的方法
     *
     * @param context            上下文
     * @param gravity            对齐方式
     * @param marginVerticle     底部的距离,一般为 0
     * @param animationDirection 动画效果 {@link AnimationDirection}
     * @param backCancelable     返回键是否可以取消
     * @param outsideCancelable  外部点击是否可以取消
     */
    protected BaseDialog(Context context, int gravity, float marginVerticle,
                         AnimationDirection animationDirection, boolean backCancelable,
                         boolean outsideCancelable) {
        super(context, R.style.BaseDialog);
        init(gravity, marginVerticle, animationDirection, backCancelable, outsideCancelable);
        mBinding = DataBindingUtil.inflate(LayoutInflater.from(context), getContentLayoutId(), null, false);
        setContentView(mBinding.getRoot());
    }

    private void init(int gravity, float marginVerticle, AnimationDirection animationDirection, boolean backCancelable, boolean outsideCancelable) {
        this.setCancelable(backCancelable);
        this.setCanceledOnTouchOutside(outsideCancelable);
        Window dialogWindow = this.getWindow();
        if (animationDirection == AnimationDirection.VERTICLE) {
            dialogWindow.setWindowAnimations(R.style.DialogVerticleWindowAnim);
        } else if (animationDirection == AnimationDirection.HORIZONTAL) {
            dialogWindow.setWindowAnimations(R.style.DialogRightHorizontalWindowAnim);
        } else if (animationDirection == AnimationDirection.GROW) {
            dialogWindow.setWindowAnimations(R.style.DialogGrowWindowAnim);
        }
        dialogWindow.getDecorView().setPadding(0, 0, 0, 0);
        WindowManager.LayoutParams layoutParams = dialogWindow.getAttributes();
        layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
        layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
        layoutParams.gravity = gravity;
        layoutParams.verticalMargin = marginVerticle;
        initLayout(layoutParams);
        dialogWindow.setAttributes(layoutParams);
    }

    /**
     * 设置宽 ,高 ,位置, 距离底部的方法, 可以由子类进行重写
     *
     * @param layoutParams
     */
    protected void initLayout(WindowManager.LayoutParams layoutParams) {
    }

    //设置 resoucelayoutid
    protected abstract int getContentLayoutId();
}

子类使用案例

package ---.dialog.order;

import android.content.Context;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.widget.TimePicker;

import com.czb.czbpos.R;
import com.czb.czbpos.constant.EventCode;
import com.czb.czbpos.databinding.DialogTimePickerBinding;
import com.czb.czbpos.dialog.BaseDialog;
import com.czb.czbpos.utils.eventbus.Event;
import com.czb.czbpos.utils.eventbus.EventBusUtil;

import java.util.Calendar;

/**
 * Created by czb365 on 2018/1/17.
 */

public class TimePickerDialog extends BaseDialog<DialogTimePickerBinding> {


    private String time1, time2 = null;

    public TimePickerDialog(Context context) {
        super(context, Gravity.CENTER, true, true);
        initView();
    }


    @Override
    protected int getContentLayoutId() {
        return R.layout.dialog_time_picker;
    }

    private void initView() {

        mBinding.setPresent(new Present());
        //设置日期简略显示 否则详细显示 包括:星期\周
        mBinding.datePicker.setCalendarViewShown(false);
        //初始化当前日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());


        mBinding.timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

                time2 = hourOfDay + ":" + minute;

            }
        });

        mBinding.timePicker.setIs24HourView(true);
        mBinding.timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));
        mBinding.timePicker.setCurrentMinute(calendar.MINUTE);


    }

    public String getTime() {
        time1 = mBinding.datePicker.getYear() + "-" +
                (mBinding.datePicker.getMonth() + 1) + "-" +
                mBinding.datePicker.getDayOfMonth();
        return time1 + " " + time2 + ":00";
    }


    public class Present {
        /**
         * 取消dialog
         *
         * @param view
         */
        public void cancleDialog(View view) {
            dismiss();
        }

        /**
         * 确定保存dialog按钮
         *
         * @param view
         */
        public void saveTimeDialog(View view) {
            if (!TextUtils.isEmpty(getTime())) {
                EventBusUtil.sendEvent(new Event(EventCode.TIME_SELECT, getTime()));
            }
            dismiss();
        }
    }

}

猜你喜欢

转载自my.oschina.net/u/1268043/blog/1615999