본문 바로가기
안드로이드 자바

[Java][Android] DatePickerDialog 에서 선택가능한 날짜 범위 지정하기

by teamnova 2022. 11. 11.
728x90

안녕하세요!

오늘은 DatePickerDialog에서 선택가능한 날짜 범위를 지정하는 방법을 알아보겠습니다.

 

 

* 결과 영상 (오늘 이전은 선택 못하고, 올해말까지 선택 가능)

 

 

오늘 이전 날짜는 선택 못 하도록 비활성화하고, 올해까지만 선택가능하도록 처리하는 코드는 아래와 같습니다.

public class MainActivity extends AppCompatActivity {

    private ImageButton imgBtn_changeDate; //날짜변경 버튼

    //오늘날짜 변수 선언
    private int currYear, currMonth, currDay;

    private DatePickerDialog.OnDateSetListener callbackMethod; //데이트피커 콜백처리 변수 선언

    @RequiresApi(api = Build.VERSION_CODES.O)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imgBtn_changeDate = findViewById(R.id.imgBtn_changeDate);

        //Calendar를 이용하여 오늘날짜 기준으로 년, 월, 일 정보를 가져온다
        final Calendar cal = Calendar.getInstance();
        currYear = cal.get(Calendar.YEAR);
        currMonth = cal.get(Calendar.MONTH);
        currDay = cal.get(Calendar.DATE);
    }

    @Override
    protected void onResume() {
        super.onResume();


        imgBtn_changeDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //날짜선택 다이알로그 창을 띄운다
                DatePickerDialog dialog = new DatePickerDialog(MainActivity.this,
                        callbackMethod, currYear, currMonth, currDay);

                Calendar maxDate = Calendar.getInstance(); //캘린더에서 선택할 수 있는 최소날짜
                Calendar minDate = Calendar.getInstance(); //캘린더에서 선택할 수 있는 최대날짜

                //오늘부터 선택가능 하도록 설정
                minDate.set(currYear, currMonth, currDay);
                //밀리세컨드로 날짜변환 후 Calendar 타임으로 변환
                dialog.getDatePicker().setMinDate(minDate.getTimeInMillis()); 
               

                // 올해말까지 선택가능 하도록 설정
                maxDate.set(currYear, 11,31);
                dialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());

                dialog.show();

            }
        });
    }

}