1

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 を返します。

ソフトキーボードが開いているかどうかを判断する適切な方法を教えてください。

4

3 に答える 3

0

ソフトキーボードを強制的に閉じる方法は次のとおりです

@Override
public void dismiss() {
    super.dismiss();
    //hide the soft keyboard
    getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
于 2013-03-13T12:45:47.937 に答える