본문 바로가기
호구지책/Java/Android

[안드로이드] datePicker 에 년월만 표시하기

by 하늘의흐름 2015. 2. 6.
반응형
datePicker = (DatePicker) findViewById(R.id.expiration_date);
try {
    Field f[] = datePicker.getClass().getDeclaredFields();
    for (Field field : f) {
        if (field.getName().equals("mDayPicker")) {
            field.setAccessible(true);
            Object dayPicker = new Object();
            dayPicker = field.get(datePicker);
            ((View) dayPicker).setVisibility(View.GONE);
        }
    }
} catch (SecurityException e) {
    Log.d("ERROR", e.getMessage());
} 
catch (IllegalArgumentException e) {
    Log.d("ERROR", e.getMessage());
} catch (IllegalAccessException e) {
    Log.d("ERROR", e.getMessage());
}

제일 중요한 부분은 if (field.getName().equals("mDayPicker")) 이 부분이다.

근데 버전업이 되면서 진저브레드(2.3)이후 버전 부터는 mDaySpinner 이라고 써야 된다고 한다.


그러니

if (field.getName().equals("mDayPicker")  || field.getName().equals("mDaySpinner") )

이렇게 개선해야 것이다.


마찬가지로

이 부분을 mYearPicker 및 mYearSpinner 로 바꾸면 년을 지울 수 있고

이 부분을 mMonthPicker 및 mMonthSpinner 로 바꾸면 월을 지울 수 있다.



소스를 참고하여 다음과 같은 데이터 피커를 만들었다.

의외로 시간이 걸린 부분이 타이틀 부분이었다.

생소한 부분이라서 조금 해맸다.

그외에 datePicker 객체를 쓰지 않고, 클래스를 통째로 불러와서 쓰면

몇가지 변경점이 있다. datePicker =>DataPickerDialog.class 가되고

두번째 datePicker가 있던 곳은 this로 변경해야 된다.




소스

import java.lang.reflect.Field;
 
import android.app.DatePickerDialog;
import android.content.Context;
import android.view.View;
import android.widget.DatePicker;

class MyDatePickerDialog extends DatePickerDialog {

 

	    public MyDatePickerDialog(Context context, OnDateSetListener callBack, int year, 
    int monthOfYear, int dayOfMonth) {
	        super(context, callBack, year, monthOfYear, dayOfMonth);
	        
	        try {  
	          	 Field[] f = DatePickerDialog.class.getDeclaredFields();
	          	 for (Field dateField : f) {
	          	  if(dateField.getName().equals("mDatePicker")) {
	          	   dateField.setAccessible(true);
	          	        
	          	   DatePicker datePicker = (DatePicker)dateField.get(this);
	          	        
	          	   Field datePickerFields[] = dateField.getType().getDeclaredFields();
	          	        
	          	   for(Field datePickerField : datePickerFields) { 
	          	    if("mDayPicker".equals(datePickerField.getName())  || 
     "mDaySpinner".equals(datePickerField.getName() )) {
	          	     datePickerField.setAccessible(true);
	          	     Object dayPicker = new Object();
	          	     dayPicker = datePickerField.get(datePicker);
	          	     ((View)dayPicker).setVisibility(View.GONE);
	          	    }
	          	   }
	          	  }
	          	 }   
	          	setTitle(year+"년 "+monthOfYear+"월");
	        	}
	          	catch (IllegalArgumentException e) {
	          	 e.printStackTrace();
	          	}
	          	catch (IllegalAccessException e) {
	          	 e.printStackTrace();
	          	}
	    }
	     

	    @Override
	    public void onDateChanged(DatePicker view, int year, int month, int day) {
	        super.onDateChanged(view, year, month, day);
	        setTitle(year+"년 "+(month+1)+"월");
	    }
	}


출처: http://stackoverflow.com/questions/4122929/how-to-display-date-picker-for-android-with-only-month-and-year-fields

참고:http://dante2k.tistory.com/archive/20130910


반응형

댓글