选择开始结束日期的view
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import android.app.DatePickerDialog; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.DatePicker; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.bjjw.cjgc.R; public class SelectDateView extends LinearLayout { public interface OnButtonClickListener { /** * @param startDate 开始日期 * @param endDate 结束日期 */ public void onOKClick(String startDate, String endDate); public void onCancelClick(); } public interface OnStartDateClickListener { public void onStartDateClick(); } public interface OnEndDateClickListener { public void onEndDateClick(); } private OnButtonClickListener buttonClickListener = null; private OnStartDateClickListener onStartDateClickListener = null; private OnEndDateClickListener onEndDateClickListener = null; private Context context; private TextView selectDate; private TextView selectDateEnd; private Button commit; private Button cancel; // private int selectYear; // private int selectMonth; // private int selectDay; private DatePickerDialog datePicker; private DatePickerDialog datePickerEnd; private Date dateE; private Date dateS; private Date now; private Calendar calendar; private SimpleDateFormat sdf; private String startDate; private String endDate; private DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // selectYear = year; // selectMonth = monthOfYear; // selectDay = dayOfMonth; dateS.setYear(year - 1900); dateS.setMonth(monthOfYear); dateS.setDate(dayOfMonth); // startDate = getDateString(year, monthOfYear, dayOfMonth); // selectDate.setText(startDate); calendar.set(year, monthOfYear, dayOfMonth); Date date = calendar.getTime(); selectDate.setText(sdf.format(date)); startDate = sdf.format(date); } }; private DatePickerDialog.OnDateSetListener listenerEnd = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // selectYear = year; // selectMonth = monthOfYear; // selectDay = dayOfMonth; dateE.setYear(year - 1900); dateE.setMonth(monthOfYear); dateE.setDate(dayOfMonth); calendar.set(year, monthOfYear, dayOfMonth); Date date = calendar.getTime(); selectDateEnd.setText(sdf.format(date)); calendar.add(Calendar.DAY_OF_YEAR, 1); date = calendar.getTime(); endDate = sdf.format(date); } }; public SelectDateView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } public SelectDateView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public SelectDateView(Context context) { super(context); init(context); } private void init(Context context) { this.context = context; View contentView = LayoutInflater.from(context).inflate(R.layout.select_date_view, this); selectDate = (TextView) contentView.findViewById(R.id.date); selectDateEnd = (TextView) contentView.findViewById(R.id.date_end); commit = (Button) contentView.findViewById(R.id.commit); cancel = (Button) contentView.findViewById(R.id.cancel); dateE = new Date(); dateS = new Date(); calendar = Calendar.getInstance(); now = calendar.getTime(); sdf = new SimpleDateFormat("yyyy-MM-dd"); int selectYear = calendar.get(Calendar.YEAR); int selectMonth = calendar.get(Calendar.MONTH); int selectDay = calendar.get(Calendar.DAY_OF_MONTH); datePicker = new DatePickerDialog(context, listener, selectYear, selectMonth, selectDay); datePickerEnd = new DatePickerDialog(context, listenerEnd, selectYear, selectMonth, selectDay); String btnText = sdf.format(now); endDate = btnText; startDate = btnText; selectDate.setText(btnText); selectDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { datePicker.show(); // 可以在下面的代码设置自定义的日期选择组件 // if (null != onStartDateClickListener) { // onStartDateClickListener.onStartDateClick(); // } } }); selectDateEnd.setText(btnText); selectDateEnd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { datePickerEnd.show(); // 可以在下面的代码设置自定义的日期选择组件 // if (null != onEndDateClickListener) { // onEndDateClickListener.onEndDateClick(); // } } }); commit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { errorSelect(); } }); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (null != buttonClickListener) { buttonClickListener.onCancelClick(); } } }); } private String getDateString(int year, int month, int day) { return year + "-" + (month + 1) + "-" + day; } /** * 2014-09-12 * 2014-09-28 * 判断日期选择是否正确 */ private void errorSelect() { String text = ""; String startError = "开始时间请选择不超过结束时间的日期"; String endError = "结束时间请选择不超过今天的日期"; try { dateE = new SimpleDateFormat("yyyy-MM-dd").parse(selectDateEnd.getText().toString()); dateS = new SimpleDateFormat("yyyy-MM-dd").parse(selectDate.getText().toString()); } catch (ParseException e) { Toast.makeText(context, "日期格式不正确", Toast.LENGTH_LONG).show(); return; } if (dateE.compareTo(now) > 0) { // text = endError; text=""; } if (dateS.compareTo(dateE) > 0) { if (!"".equals(text)) { text += ", " + startError; } else { text = startError; } } if (!"".equals(text)) { Toast.makeText(context, text, Toast.LENGTH_LONG).show(); } else { if (null != buttonClickListener) { buttonClickListener.onOKClick(selectDate.getText().toString(), selectDateEnd.getText().toString()); } } } public TextView getSelectDate() { return selectDate; } public TextView getSelectDateEnd() { return selectDateEnd; } public void setOnButtonClickListener(OnButtonClickListener buttonClickListener) { this.buttonClickListener = buttonClickListener; } public void setOnStartDateClickListener( OnStartDateClickListener onStartDateClickListener) { this.onStartDateClickListener = onStartDateClickListener; } public void setOnEndDateClickListener( OnEndDateClickListener onEndDateClickListener) { this.onEndDateClickListener = onEndDateClickListener; } }