我正在自定义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()值。但它总是回归虚假。
所以有人请帮助我找到决定软键盘是否打开的正确方法。
答案 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
)
我想你明白了。很高兴。