Android停用屏幕键盘,当DialogFragment被setCanceledOnTouchOutside事件取消时如何隐藏屏幕键盘...

如果编辑文本当前是关注的,并且用户在DialogFragment之外单击; 我想让屏幕键盘消失。 当DialogFragment以这种方式被解散时,我可以得到它的工作:

InputMethodManager imm; public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) { imm = (InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE); ...} @Override public void dismiss(){ imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); super.dismiss(); }

但是,如果我通过触摸dialogfragment之外的方法来取消同样的操作,它将不起作用。 我试图通过覆盖取消这样做:@Override public void onCancel(DialogInterface dialog){ imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); super.onCancel(dialog); }

该function在外部触摸事件发生时被调用,但键盘未被移除。

这是我做了什么来做到这一点终于工作…我需要不使用键盘的小部件…但使用currentfocus得到的windowtoken删除键盘时,用户select的东西在对话框外…

@Override public void onStop() { // make sure the keyboard goes away when the user selects something outside the view (cancelled outside) if( Utilities.isValidActivity(this.getActivity())) { InputMethodManager imm = (InputMethodManager)this.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); // not the search view but the current focus at this point imm.hideSoftInputFromWindow(this.getActivity().getCurrentFocus().getWindowToken(), 0); } super.onStop(); }

我可以通过在对话框中取消代码执行之前对对话框进行分类并隐藏键盘来解决同样的问题。

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = new Dialog(getActivity(), getTheme()) { @Override public void cancel() { if (getActivity() != null && getView() != null) { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getView().getWindowToken(), 0); } super.cancel(); } }; return dialog; }

我尝试了很多替代方法,包括使用DialogFragment的onCancel和onDimiss听众无济于事。 我相信这个问题是侦听器是asynchronous调用的,而解除/取消是同步处理的。 所以当你的监听器被调用来隐藏键盘时,窗口标记不再存在。

我有同样的问题,并通过在AndroidManifest下生成DialogFragment来解决它:

android:windowSoftInputMode="stateHidden"

尝试像这样添加一个onDismissListener 。

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { // TODO Auto-generated method stub dismiss(); } });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值