在平板电脑上显示DialogFragment时隐藏键盘?

时间:2013-08-30 10:42:06

标签: android keyboard show-hide dialogfragment

我正在使用DialogFragment ListView(列出所有客户)和EditText(从列表中搜索),它运行正常。但是,每当从片段显示对话框时,始终显示键盘并且用户需要辞职。有没有办法在显示对话框片段时第一次隐藏它?然后,当用户点击编辑文本时,键盘应该出现。

我已尝试在我的XML中设置android:focusable="false",但在点击EditText后也始终隐藏键盘也没有显示。

然后我尝试设置android:focusableInTouchMode="true"但是,与上面相同

4 个答案:

答案 0 :(得分:21)

在DialogFragment onCreateView()中添加以下内容:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState)
{
 View view = super.onCreateView( inflater, container, savedInstanceState );
 //to hide keyboard when showing dialog fragment
 getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 return view;
}

答案 1 :(得分:1)

这应该可以解决您的问题

android:windowSoftInputMode="stateHidden"

android:windowSoftInputMode="stateUnchanged" 

答案 2 :(得分:0)

使用此方法,对我有用:

public void hideSoftKeyboard() {
        try {
            View windowToken = getDialog().getWindow().getDecorView().getRootView();
            InputMethodManager imm = (InputMethodManager) getDialog().getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow( windowToken.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        } catch (Exception ex) {
            Log.e(ex);
        }
    }

答案 3 :(得分:0)

情况1:如果要在打开对话框片段时关闭键盘

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState)
{
 View view = super.onCreateView( inflater, container, savedInstanceState );
 //to hide keyboard when showing dialog fragment
 getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 return view;
}

情况2:如果要在选择自动完成文本或其他任何编辑文本视图时关闭键盘,请使用

 public static void hideDialogFragmentKeyboard(Context context,View view) {
        view.postDelayed(new Runnable() {
            @Override
            public void run() {
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }, 100);
    }   

我认为这会起作用