2012-05-12 2 views
3

내 앱에서 DatePickerDialog를 구현하고 있으며 문제를 해결하기 위해 "Day"를 변경하려고 할 때 소프트 키보드가 튀어 나와 숫자가 표시되는 반면 캐럿은 숫자 앞에 표시됩니다. 숫자를 클릭하면 이미 "주"상자에있는 숫자가 대체되지 않습니다. 내가 Day 상자에있는 숫자의 끝으로 가서 그것을 삭제하면 (소프트 키보드의 백 스페이스) 숫자를 입력하면됩니다.DatePickerDialog 소프트 키보드 유형이 적용되지 않습니다.

왜 이런 일이 발생합니까? 왜 거기에 이미있는 것을 대체하지 않습니까?

protected Dialog onCreateDialog(int id) 
{ 
    Dialog ReturnDialog = null; 

    switch (id) 
    { 
    case DATE_DIALOG_ID:   
     ReturnDialog = new DatePickerDialog(this, mDateSetListener, Year, Month - 1, Day); 
     break; 
    } 
    return ReturnDialog; 
} 

그럼 내가 OnClickListener를()

showDialog(DATE_DIALOG_ID); 

내가 뭘 잘못에서이 전화 :

이 코드는 대화 상자가 표시됩니다?

+0

일부 코드보기 –

+0

첨부 코드! :) –

+0

누구에게도 익숙합니까? –

답변

1

정상적인 동작으로 보입니다. DatePickerDialog은 하나의 DatePicker 위젯으로 구성되어 있으며 각 날짜 부분 (일, 월, 연도)에 3 개의 NumberPicker 위젯으로 구성되어 있습니다. 그 NumberPicker은 입력 영역으로 ImageViewsEditText으로 구성됩니다. EditText을 클릭하여 키보드에 데이터/텍스트 입력 을 표시하지 않는 경우은 이전 데이터를 지우므로 문제는 정상입니다.

특히 입력 (EditTexts)에 액세스 할 수 없기 때문에 오래된 Android 버전을 포함하려는 경우이 동작을 무시할 수 있습니다. 예를 들어 구형 Android 버전에서는 대화 상자의 DatePicker 위젯에 액세스 할 수 없으며이 위젯에 액세스하는 방법은 DatePickerDialog (API 버전 11 Honeycomb)에만 최근에 추가되었습니다.

물론 동작을 구현하기 위해 DatePickerDialog을 다시 만들 수 있지만 그만한 가치는 없다고 생각합니다.

+0

답장을 보내 주셔서 감사합니다. 안드로이드는 자신의 캘린더 응용 프로그램에서 어떻게 이러한 동작을 피할 수 있습니까? 2.3에서도이 문제는 자신의 응용 프로그램에 없었습니다.이 응용 프로그램에서는 새 이벤트에 DatePickerDialog도 사용됩니다. –

+0

@EladNava 기본 캘린더 앱을 사용하거나 보지 않았지만이 비헤이비어가 2.3 버전에 있는지 확인 하시겠습니까? Honeycomb을 시작으로 당신이 원하는 것을 할 수있는'getDatePicker' 메소드가 있습니다.하지만이 버전 아래에서는 어떻게 할 수 있는지 보지 못합니다. – Luksprog

+0

즉, 'getDatePicker'가 Android v4 지원 라이브러리 (호환성 패키지)에서 제공된다는 의미입니까? –

0

당신은 다음과 같이 당신의 DatePickerDialogOnGlobalFocusChangeListener을 추가하여 "자동으로 입력 상자에 포커스가있을 때 내부의 모든 텍스트를 선택"할 시도 할 수 있습니다 :

private final OnGlobalFocusChangeListener mFocusCheck = new OnGlobalFocusChangeListener() { 
    @Override 
    public void onGlobalFocusChanged(View oldFocus, View newFocus) { 
     if (newFocus != null && newFocus instanceof EditText) { 
      final EditText editText = (EditText) newFocus; 
      editText.selectAll(); 
     } 
    } 
}; 

@Override 
protected Dialog onCreateDialog(int id) { 
    Dialog dialog = null; 

    switch (id) { 
     case DIALOG_ID: 
      dialog = new DatePickerDialog(this, mDateSetListener, year, month - 1, day) { 
       @Override 
       public void setView(View view) { 
        super.setView(view); 
        view.getViewTreeObserver().addOnGlobalFocusChangeListener(mFocusCheck); 
       } 
      }; 
      break; 
    } 

    return dialog; 
} 

그러나이가 작동하지 않을 수도 있음을 유의하시기 바랍니다 모든 안드로이드 버전은 우리가 어떤 가정 (주로 DatePicker 구성 요소가 NumberPicker을 포함하여 EditText을 포함하여 내부적으로 구현된다는 사실에 의존하기 때문에).

에뮬레이터를 비교해 보면 NumberPicker의 동작이 이미 다릅니다 (4.0에서 표시하려면 소프트 키보드를 얻으려면 두 번 탭해야하며 4.1에서는 단일 탭 충분하다).

+0

고마워요, 코드를 시도하고 알려 드리겠습니다 –

+0

불행히도 4.0.3에서 코드가 이미 구현되었습니다. NumberPicker를 사용하여 아무런 효과가 없었습니다 .NumberPicker에서 읽었을 때 프라이빗처럼 보이고 소스를 복사하지 않고 SDK에서 사용할 수없는 것처럼 보입니다. –