0

我自定義DatePickerDialog以爲本機DatePicker添加一些功能。那是按預期工作的。但是DatepickerDialog的日,月,年字段默認編輯。所以,當我關注那些可編輯輸入字段軟鍵盤將是默認打開和使用將能夠編輯日期/月/年,當用戶編輯日/月/年ANS按設定/取消編輯日期DatePickerDialog是越來越封閉,功能正常工作。 這裏我的問題是,當用戶編輯日/月/年ANS按設定/取消編輯日期DatePickerDialog是越來越封閉,softkeyboard仍然打開。它沒有得到儘快DatePickerDialog被駁回關閉。所以爲此,我嘗試用以下代碼隱藏軟鍵盤。如何在屏幕上打開DatePickerDialog時隱藏軟板

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); 

    } 
}; 

但這不起作用。所以我試着用下面的代碼切換軟鍵盤。

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。如果我刪除,如果(imm.isActive())時softkeyboard是打開狀態的工作。但是當softkeyboard沒有打開並且使用剛剛打開的DatePickerDialog並且通過用箭頭更改來設置或取消日期時softkeyboard在關閉DatePickerDialog時被打開。所以我需要正確地獲取imm.isActive()值。但它總是返回假。

所以有人請幫助我找到合適的方式來決定是否打開軟鍵盤。

回答

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);