본문 바로가기

IT

DatePickerDialog 에서 일, 월, 년도 제거하는 방법

반응형

 다음 소스코드를 먼저 보자.


import java.lang.reflect.Field;

import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.widget.DatePicker;

public class DialogDatePickerOnlyYear extends DatePickerDialog {

	private String TITLE = null;

	public DialogDatePickerOnlyYear(Context context,
			OnDateSetListener callBack, int year, int monthOfYear,
			int dayOfMonth) {
		super(context, callBack, year, monthOfYear, dayOfMonth);

		// 일, 월 선택 스피너 제거
		try {
			Field[] datePickerDialogFields = DatePickerDialog.class.getDeclaredFields();
			for (Field datePickerDialogField : datePickerDialogFields) {
				if (datePickerDialogField.getName().equals("mDatePicker")) {
					datePickerDialogField.setAccessible(true);
					DatePicker datePicker = (DatePicker) datePickerDialogField.get(this);
					Field datePickerFields[] = datePickerDialogField.getType()
							.getDeclaredFields();
					for (Field datePickerField : datePickerFields) {
						if ("mDayPicker".equals(datePickerField.getName())
								|| "mDaySpinner".equals(datePickerField.getName())
								|| "mMonthPicker".equals(datePickerField.getName())
								|| "mMonthSpinner".equals(datePickerField.getName())) {
							datePickerField.setAccessible(true);
							Object dayPicker = new Object();
							dayPicker = datePickerField.get(datePicker);
							((View) dayPicker).setVisibility(View.GONE);
						}
					}
				}

			}
		} catch (Exception ex) {
		}

		if (TITLE != null)
			setTitle(TITLE);
	}
	
	public void setFixedTitle(String title) {
		TITLE = title;
		setTitle(TITLE);
	}

	@Override
	public void onDateChanged(DatePicker view, int year, int month, int day) {
		super.onDateChanged(view, year, month, day);
		
		if (TITLE != null)
			setTitle(TITLE);
	}
}

 중요한 부분을 먼저 살펴보면 중간에 문자열의 "mDayPicker", "mDaySpinner" 부분이다.

 문자열에 뜻대로 일자선택다이얼로그에서 '일'을 선택하는 부분의 field를 제거하는 방식이다. Picker와 Spinner두가지가 있는데 이는 2.3 이하 버전과 그 초과버전에서 사용하는 명칭이 다르기때문이다.


위와 같은 방식으로 년도를 없애고 싶다면 "mYearPicker", "mYearSpinner"를 추가하면 된다.


 그런데 문제는 위와같이 해도 이 DatePickerDialog에서는 타이틀부분에 생성자에서 입력한 년월일이 표시가 된다는 것이다. 이를 위해서 setFixedTitle이라는 메소드를 추가하여 타이틀부분의 텍스트를 날짜가 변경되더라도 타이틀은 고정하도록 해놓았다. 뭐... 원한다면 생성자의 년월일과 onDateChanged메소드의 년월일을 이용하여 원하는 형태의 타이틀을 직접만들어도 좋을 것이다.


 끝.

반응형