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(); } } }