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

10

我正在使用带有 ListView(列出所有客户)和 EditText(从列表中搜索)的 DialogFragment,它工作得很好。 但是,每当从片段显示对话框时,键盘始终显示,用户需要辞职。是否有任何方法在首次显示对话框片段时隐藏键盘?然后,当用户单击编辑文本时,键盘应该出现。

我尝试在我的XML中设置 android:focusable="false",但它总是在单击 EditText 后隐藏键盘,也不会显示。

然后我尝试设置 android:focusableInTouchMode="true",但是仍然出现与上述相同的问题。


请查看此帖子 - Steve Benett
https://dev59.com/iHI_5IYBdhLWcg3wBub4 - RVG
谢谢朋友们,我会检查并告诉你 @Ganesh - Sugan S
4个回答

22

在你的 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;
}

太棒了。我看过所有其他帖子,它们只涉及活动,无论我把它放在哪里处理片段时都不起作用。getDialog()与getActivity()对我来说是关键。谢谢! - James
当对话框是Android 4.4中的“DataPickerFragment”时,它不能工作。我将隐藏键盘方法放在“onResume()”方法中,现在它可以使用了。无论如何,谢谢。 - DysaniazzZ

2
这应该能解决你的问题。
android:windowSoftInputMode="stateHidden"

或者
android:windowSoftInputMode="stateUnchanged" 

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;
}

第二种情况:如果您想在选择自动完成文本或任何其他编辑文本视图时关闭键盘,请使用简单的方法。

 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);
    }   

我认为这会有效


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);
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接