본문 바로가기
개발/android

TimePicker, DatePicker, NumberPicker의 폰트 바꾸기

by 매몰 2016. 7. 18.

 

 

시간을 쉽게 선택할 수 있는 TimePicker,

날짜를 쉽게 선택할 수 있는 DatePicker

 

이것들은 NumberPicker로 이루어진 UI이다.

그래서 이 Picker들의 폰트를 바꾸기 위해서는  NumberPicker의 구조를 알아야 한다.

 

NumberPicker는 현재 선택된 숫자를 보여주는 TextView와 

그 주위의 숫자를 스크롤하며 보여주는 휠 뷰로 구성된다.

(스타일을 Theme.Holo.Light 로 적용했을 경우)

 

즉, 폰트를 바꿔줄때 이 두가지를 모두 바꿔줘야 한다는 의미다.

 

public void setTypeface(NumberPicker picker, Typeface typeface) {
    //주위의 숫자들을 보여주는 휠 뷰
    try {
        //클래스의 휠 Paint 객체를 꺼내 폰트를 적용
        Field field = NumberPicker.class.getDeclaredField("mSelectorWheelPaint");
        field.setAccessible(true);
        ((Paint)field.get(picker)).setTypeface(typeface);

    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }

    //선택된 숫자를 보여주는 TextView
    int count = picker.getChildCount();
    for(int i = 0 ; i < count ; i++) {
        //자식뷰로 꺼내 폰트를 적용
        View view = picker.getChildAt(i);
        if (view instanceof TextView)
            ((TextView)view).setTypeface(typeface);
    }
}

 

 

이를 TimePicker에 적용하면 이렇다.

DatePicker도 같은 방식으로 하면 된다. 

 

public class MyTimePicker extends TimePicker {

public MyTimePicker(Context context) {
super(context);
}

public MyTimePicker(Context context, AttributeSet attrs) {
super(context, attrs);
}

public void setTypeface(Typeface typeface) {
LinearLayout layout = (LinearLayout)getChildAt(0);

for(int i = 0 ; i < layout.getChildCount() ; i++) {
LinearLayout layout1 = (LinearLayout) layout.getChildAt(i);

//NumberPicker가 있는 자식뷰에서 적용
for(int j = 0 ; j < layout1.getChildCount() ; j++) {
View view = layout1.getChildAt(j);
if (view instanceof NumberPicker)
setTypeface((NumberPicker)view, typeface);
}
}
}
}

 

 

 

 

 

 

 

도움이 되셨다면~ 정성으로 빚은 저희 앱!  많은 이용 바래요:)

 

https://meorimal.com/index.html?tab=spaceship

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기