0

기본 DatePicker에 대한 일부 기능을 추가하기 위해 DatePickerDialog를 사용자 정의하고 있습니다. 예상대로 작동합니다. 그러나 DatepickerDialog의 일, 월, 년 필드는 기본적으로 편집 가능합니다. 그래서 편집 가능한 입력 필드에 초점을 맞춘 경우 소프트 키보드는 기본적으로 열리고 날짜/월/년을 편집 할 수 있으며 사용자가 일/월/년을 편집 할 때 누를 수 있습니다 편집 날짜 설정/취소 DatePickerDialog가 닫히고 기능이 제대로 작동하고 있습니다. 여기 내 문제는 사용자가 일/월/년을 편집 할 때 ans 프레스 편집 날짜를 설정/취소 할 때입니다. DatePickerDialog가 닫히고 softkeyboard가 여전히 열려 있습니다. DatePickerDialog가 해지 되 자마자 닫히지 않습니다. 그래서 나는 다음 코드로 softkeyboard를 숨기려고했다.DatePickerDialog가 화면에서 열려있을 때 softketboard를 숨기는 방법

private DialogInterface.OnDismissListener myOnDismissListener = new DialogInterface.OnDismissListener() { 
    public void onDismiss(DialogInterface dialog) { 
     InputMethodManager imm = (InputMethodManager) ((Activity) ctContext) 
       .getSystemService(Activity.INPUT_METHOD_SERVICE); 

     imm.hideSoftInputFromWindow(this.getWindowToken(), 
       InputMethodManager.HIDE_NOT_ALWAYS); 

    } 
}; 

하지만 작동하지 않습니다. 그래서 다음 코드로 softkeyboard를 토글하려고했습니다.

private DialogInterface.OnDismissListener myOnDismissListener = new DialogInterface.OnDismissListener() { 
    public void onDismiss(DialogInterface dialog) { 
     InputMethodManager imm = (InputMethodManager) ((Activity) ctContext) 
       .getSystemService(Activity.INPUT_METHOD_SERVICE); 
     if(imm.isActive()) 
      imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
    } 
}; 

그러나 imm.isActive()는 항상 false를 반환합니다. softkeyboard가 열려있을 때 if (imm.isActive())가 작동하는지 여부를 제거하면. 그러나 softkeyboard가 열리지 않고 DatePickerDialog를 열었을 때 화살표로 변경하여 날짜를 설정 또는 취소하면 DatePickerDialog를 닫으면 softkeyboard가 열립니다. 그래서 imm.isActive() 값을 올바르게 가져와야합니다. 그러나 항상 false를 반환합니다.

그래서 어느 정도 소프트 키 보드를 열 었는지 여부를 결정하는 적절한 방법을 알려주십시오.

답변

0

는 여기에 내가 소프트 키보드

@Override 
public void dismiss() { 
    super.dismiss(); 
    //hide the soft keyboard 
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
} 
0

이 datepickerdialog에서 수동으로 편집을 중지 최선의 선택을 닫는 힘을 처리 한 방법입니다. 이것을 사용하여 소프트 키 보드를 비활성화 할 수 있습니다.

  final DatePickerDialog dp = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() { 

       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

        Calendar newDate = Calendar.getInstance(); 
        newDate.set(year, monthOfYear, dayOfMonth); 
        txtdate.setText(dateFormatter.format(newDate.getTime())); 

       } 
      }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH)); 

      dp.show(); 
      dp.getDatePicker().setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS);