DatePickerDialog をカスタマイズして、ネイティブ DatePicker の機能の一部を追加しています。それは期待どおりに機能しています。ただし、DatepickerDialog の日、月、年のフィールドはデフォルトで編集可能です。したがって、これらの編集可能な入力フィールドにフォーカスすると、デフォルトでソフトキーボードが開き、使用して日付/月/年を編集できるようになり、ユーザーが日/月/年を編集し、編集した日付を設定/キャンセルすると、DatePickerDialogが閉じられ、機能は正常に動作しています。ここで私の問題は、ユーザーが日/月/年を編集し、編集した日付を設定/キャンセルすると、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 を返します。その if(imm.isActive()) 条件を削除すると、ソフトキーボードが開いているときに機能します。しかし、ソフトキーボードが開かれていない場合は、DatePickerDialogを開いて使用し、矢印で変更して日付を設定またはキャンセルすると、DatePickerDialogを閉じるとソフトキーボードが開かれます。したがって、その imm.isActive() 値を適切に取得する必要があります。しかし、常に false を返します。
ソフトキーボードが開いているかどうかを判断する適切な方法を教えてください。