Newer
Older
dxcgt / app / src / main / java / com / smartdot / cgt / view / DateFieldText.java
wangxitong on 6 Apr 2021 2 KB first commit
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();
    }

}