Android TimePicker 와 DatePicker 크기 조정

주소 http://ziliao1.com/Article/Show/0DB02B87AFD7E9EB9AA6E15FB26250D5.html
최근 에 app 을 썼 습 니 다. DatePicker 와 TimePicker 를 병렬 로 표시 합 니 다.그러나 안 드 로 이 드 내부 에서 DatePicker 와 TimePicker 크기 를 고정 시 켜 4.5 인치 휴대 전화 화면 한 줄 에 하나만 표시 되 고 다른 하 나 는 완전히 표시 되 지 않 습 니 다.인터넷 에서 검색 해 보 니 좋 은 해결 방안 이 없 었 고 다른 사람 이 쓴 사용자 정의 컨트롤 을 보 았 습 니 다. 연 구 를 통 해 두 구성 요소 의 크기 를 조정 하 는 방법 을 발견 하 였 습 니 다.
이전 효 과 를 조정 하지 않 았 습 니 다. 그림 참조: TimePicker 는 아주 작은 부분 만 표 시 됩 니 다.
TimePicker 와 DatePicker 의 모든 선택 상 자 는 NumberPicker 이 고 NumberPicker 는 Layout Params 를 바 꿀 수 있 기 때문에 다음 과 같은 방향 으로 조정 할 수 있 습 니 다.
1. DatePicker 와 TimePicker 의 글꼴 크기 를 변경 합 니 다. DatePicker 와 TimePicker 가 줄 어 든 후에 글 자 를 완전히 표시 하기 위해 서 입 니 다.
2. DatePicker 와 TimePicker 에 있 는 NumberPicker 받 기
3. 얻 은 NumberPicker 의 폭 을 바 꾸 면 큰 성 과 를 거 둘 수 있 습 니 다.
 
1. 글꼴 크기 변경
     글꼴 크기 를 바 꾸 는 방법 은 몇 가지 가 있 습 니 다. 통일 을 위해 저 는 테마 자원 으로 글꼴 크기 를 바 꾸 었 습 니 다. 코드 는 다음 과 같 습 니 다.
 
    

 
2. DatePicker 와 TimePicker 에 있 는 NumberPicker 받 기
    DatePicker 와 TimePicker 는 모두 FrameLayout 클래스 를 계승 하기 때문에 함 수 는 다음 과 같이 정의 할 수 있 습 니 다.
   
                /**
		 *   FrameLayout  
		 * @param tp
		 */
		private void resizePikcer(FrameLayout tp){
			List npList = findNumberPicker(tp);
			for(NumberPicker np:npList){
				resizeNumberPicker(np);
			}
		}

이 함 수 는 매우 간단 합 니 다. 매개 변 수 는 FrameLayout 입 니 다. 호출 할 때 하위 클래스 에 들 어가 면 됩 니 다.이 함 수 는 내 가 사용자 정의 findNumberPicker 함 수 를 호출 하여 tp 에 있 는 모든 NumberPicker 를 찾 은 다음 사용자 정의 resizeNumberPicker 로 크기 를 조정 합 니 다.
 
  그 중: findNumberPicker 정 의 는 다음 과 같 습 니 다.
		/**
		 *   viewGroup   numberpicker  
		 * @param viewGroup
		 * @return
		 */
		private List findNumberPicker(ViewGroup viewGroup){
			List npList = new ArrayList();
			View child = null;
			if(null != viewGroup){
				for(int i = 0;i result = findNumberPicker((ViewGroup)child);
						if(result.size()>0){
							return result;
						}
					}
				}
			}
			return npList;
		}

이 함 수 는 view Group 을 옮 겨 다 니 는 하위 요소 입 니 다. NumberPicker 라면 집합 에 가입 합 니 다.LinearLayout 레이아웃 이 라면 이 함 수 를 재 귀적 으로 호출 하여 레이아웃 에 있 는 NumberPicker 를 찾 습 니 다.
 
resizeNumberPicker 정 의 는 다음 과 같 습 니 다.
		/*
		 *   numberpicker  
		 */
		private void resizeNumberPicker(NumberPicker np){
			LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(50, LayoutParams.WRAP_CONTENT);
			params.setMargins(10, 0, 10, 0);
			np.setLayoutParams(params);
		}

이 함 수 는 조정 기능 을 완성 하고 간단 합 니 다. new 레이아웃 매개 변 수 를 설정 한 다음 에 폭 을 50 으로 설정 하고 높이 는 wrap 입 니 다.content, setMargins 를 통 해 사 이 드 거 리 를 설정 하고 NumberPicker 의 레이아웃 매개 변 수 를 이 값 으로 설정 합 니 다.
 
이 를 준비 하면 호출 이 가능 합 니 다. 호출 도 간단 합 니 다. 바로 DatePicker 와 TimePicker 대상 을 얻 은 다음 에 resizePicker (DatePicker) 와 resizePicker (TimePicker) 를 사용 하면 됩 니 다.
아래 에 나의 호출 코드 를 붙 여 라.
			DatePicker datePicker = (DatePicker)rootView.findViewById(R.id.date);//     
			TimePicker timePicker = (TimePicker)rootView.findViewById(R.id.time);//     
			resizePikcer(datePicker);//  datepicker  
			resizePikcer(timePicker);//  timepicker  

 
큰 성 과 를 거 두 었 습 니 다. 모든 절차 가 끝 난 후에 DatePicker 와 TimePicker 는 나란히 표시 할 수 있 습 니 다. 제 표시 결 과 는 다음 그림 과 같 습 니 다.
DatePicker 의 분할 선 색상 설정
/**
     * 
     *              
     * @param datePicker
     */
    private void setDatePickerDividerColor(DatePicker datePicker){
        // Divider changing:
         
        //    mSpinners
        LinearLayout llFirst       = (LinearLayout) datePicker.getChildAt(0);
        
        //    NumberPicker 
        LinearLayout mSpinners      = (LinearLayout) llFirst.getChildAt(0);
        for (int i = 0; i < mSpinners.getChildCount(); i++) {
            NumberPicker picker = (NumberPicker) mSpinners.getChildAt(i); 
             
            Field[] pickerFields = NumberPicker.class.getDeclaredFields();
            for (Field pf : pickerFields) {
                if (pf.getName().equals("mSelectionDivider")) {
                    pf.setAccessible(true);
                    try {
                        pf.set(picker, new ColorDrawable(ResourceUtil.getColor(R.color.com_text_red)));
                    } catch (IllegalArgumentException e) {
                        e.printStackTrace();
                    } catch (NotFoundException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    break;
                }
            }
        }
    }

좋은 웹페이지 즐겨찾기