如何在屏幕上打开DatePickerDialog时隐藏软电话板

时间:2012-12-10 07:24:58

标签: android android-softkeyboard android-datepicker datepickerdialog

我正在自定义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()值。但它总是回归虚假。

所以有人请帮助我找到决定软键盘是否打开的正确方法。

3 个答案:

答案 0 :(得分:1)

这是停止在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);

答案 1 :(得分:0)

这是我处理强制关闭软键盘的方式

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

答案 2 :(得分:0)

DatePickerDialog 项目中停止手动编辑的最佳选项是使用设置的 descendantFocusability 。您可以在代码或对话框样式文件中添加它。我个人建议使用它的样式。

方法1:使用代码

datePickerDialog.datePicker.setDescendantFocusability(DatePicker.FOCUS_BLOCK_DESCENDANTS)

方法2:使用样式

<style name="MyDatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog"> <item name="android:descendantFocusability">blocksDescendants</item </style>

现在在对话框中设置样式

datePickerDialog = DatePickerDialog(
                    this.context,
                    R.style.MyDatePickerDialogTheme
                )

我想你明白了。很高兴。