package com.smartdot.cgt.view; import java.text.SimpleDateFormat; import java.util.Date; import android.app.DatePickerDialog; import android.app.DatePickerDialog.OnDateSetListener; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.graphics.Rect; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.widget.DatePicker; import android.widget.EditText; public class DateFieldText extends EditText { private DatePickerDialog dialog; private final String dateFormatParrent = "yyyy-MM-dd"; public DateFieldText(Context context) { super(context); } public DateFieldText(Context context, AttributeSet attrs) { super(context, attrs); } public DateFieldText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onFinishInflate() { createView(); super.onFinishInflate(); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_ENTER) { showDateSelectDialog(); } return true; } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { if (focused) { showDateSelectDialog(); } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { showDateSelectDialog(); } return true; } private void createView() { this.setFocusableInTouchMode(false); } private void showDateSelectDialog() { String dateString = this.getText().toString(); SimpleDateFormat df = new SimpleDateFormat(dateFormatParrent); Date date = new Date(); try { date = df.parse(dateString); } catch (Exception e) { } dialog = new DatePickerDialog(this.getContext(), new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Date date = new Date(year - 1900, monthOfYear, dayOfMonth); SimpleDateFormat df = new SimpleDateFormat(dateFormatParrent); String dateString = df.format(date); DateFieldText.this.setText(dateString); } }, date.getYear() + 1900, date.getMonth(), date.getDate()); dialog.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { DateFieldText.this.setText(""); } }); dialog.show(); } }