package com.codbking.widget; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.support.annotation.StringRes; import android.text.TextUtils; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.TextView; import com.codbking.widget.bean.DateType; import java.text.SimpleDateFormat; import java.util.Date; /** * Created by codbking on 2016/8/11. */ public class DatePickDialog extends Dialog implements OnChangeListener, View.OnClickListener { private TextView titleTv; private FrameLayout wheelLayout; private TextView cancel; private TextView sure; private TextView next; private ViewGroup rlSure; private ViewGroup rlNext; private TextView messgeTv; private String title; private String format; private DateType type = DateType.TYPE_ALL; //开始时间 private Date startDate = new Date(); //年分限制,默认上下5年 private int yearLimt = 5; private OnChangeListener onChangeListener; private View.OnClickListener onCancelListener; private OnSureListener onSureListener; private OnSureListener onNextListener; private DatePicker mDatePicker; //设置标题 public void setTitle(String title) { this.title = title; } //设置模式 public void setType(DateType type) { this.type = type; } //设置选择日期显示格式,设置显示message,不设置不显示message public void setMessageFormat(String format) { this.format = format; } //设置开始时间 public void setStartDate(Date startDate) { this.startDate = startDate; } //设置年份限制,上下年份 public void setYearLimt(int yearLimt) { this.yearLimt = yearLimt; } //设置选择回调 public void setOnChangeListener(OnChangeListener onChangeListener) { this.onChangeListener = onChangeListener; } public void setOnCancelListener(View.OnClickListener onClickListener) { this.onCancelListener = onClickListener; } //设置点击确定按钮,回调 public void setOnSureListener(OnSureListener onSureListener) { this.onSureListener = onSureListener; if (rlSure != null) rlSure.setVisibility(View.VISIBLE); } /** * 设置点击确定按钮,回调 */ public void setOnNextListener(OnSureListener onNextListener) { this.onNextListener = onNextListener; if (rlNext != null) rlNext.setVisibility(View.VISIBLE); } /** * 设置否定的按钮回调:取消 */ public void setNegativeButton(CharSequence str, View.OnClickListener onClickListener) { if (!TextUtils.isEmpty(str)) { cancel.setText(str); } setOnCancelListener(onClickListener); } /** * 设置否定的按钮回调:取消 */ public void setNegativeButton(@StringRes int stringRes, View.OnClickListener onClickListener) { setNegativeButton(getContext().getResources().getString(stringRes), onClickListener); } /** * 设置点击确定按钮,回调 */ public void setPositiveButton(CharSequence str, OnSureListener onSureListener) { if (!TextUtils.isEmpty(str)) { sure.setText(str); } setOnSureListener(onSureListener); } public void setPositiveButton(@StringRes int stringRes, OnSureListener onSureListener) { setPositiveButton(getContext().getResources().getString(stringRes), onSureListener); } public void setNextButton(CharSequence str, OnSureListener onSureListener) { if (!TextUtils.isEmpty(str)) { next.setText(str); } setOnNextListener(onSureListener); } public void setNextButton(@StringRes int stringRes, OnSureListener onSureListener) { setNextButton(getContext().getResources().getString(stringRes), onSureListener); } public DatePickDialog(Context context) { super(context, R.style.dialog_style); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.cbk_dialog_pick_time); initView(); initParas(); } private DatePicker getDatePicker() { DatePicker picker = new DatePicker(getContext(), type); picker.setStartDate(startDate); picker.setYearLimt(yearLimt); picker.setOnChangeListener(this); picker.init(); return picker; } private void initView() { sure = (TextView) findViewById(R.id.tv_sure); next = (TextView) findViewById(R.id.tv_next); cancel = (TextView) findViewById(R.id.tv_cancel); rlSure = (ViewGroup) findViewById(R.id.rl_sure); rlNext = (ViewGroup) findViewById(R.id.rl_next); wheelLayout = (FrameLayout) findViewById(R.id.fl_wheel_layout); titleTv = (TextView) findViewById(R.id.tv_title); messgeTv = (TextView) findViewById(R.id.tv_message); mDatePicker = getDatePicker(); wheelLayout.addView(mDatePicker); //setValue titleTv.setText(title); rlSure.setVisibility(View.GONE); rlNext.setVisibility(View.GONE); cancel.setOnClickListener(this); sure.setOnClickListener(this); next.setOnClickListener(this); if (onSureListener != null) { rlSure.setVisibility(View.VISIBLE); } if (onNextListener != null) { rlNext.setVisibility(View.VISIBLE); } /* cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); sure.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); if (onSureListener != null) { onSureListener.onSure(mDatePicker.getSelectDate()); } } }); next.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); if (onNextLisener != null) { onNextLisener.onSure(mDatePicker.getSelectDate()); } } });*/ } private void initParas() { WindowManager.LayoutParams params = getWindow().getAttributes(); params.gravity = Gravity.BOTTOM; params.width = DateUtils.getScreenWidth(getContext()); getWindow().setAttributes(params); } @SuppressLint("SimpleDateFormat") @Override public void onChanged(Date date) { if (onChangeListener != null) { onChangeListener.onChanged(date); } if (!TextUtils.isEmpty(format)) { String messge = ""; try { messge = new SimpleDateFormat(format).format(date); } catch (Exception e) { e.printStackTrace(); } messgeTv.setText(messge); } } @Override public void onClick(View view) { int i = view.getId(); if (i == R.id.tv_cancel) { dismiss(); if (onCancelListener != null) { onCancelListener.onClick(view); } } else if (i == R.id.tv_sure) { dismiss(); if (onSureListener != null) { onSureListener.onSure(mDatePicker.getSelectDate()); } } else if (i == R.id.tv_next) { dismiss(); if (onNextListener != null) { onNextListener.onSure(mDatePicker.getSelectDate()); } } } }