10

我正在使用DialogFragmentListView列出所有客户)和EditText(从列表中搜索),它工作正常。但是,每当从片段中显示对话框时,总是会显示键盘并且用户需要退出。有没有办法在显示对话框片段时第一次隐藏它?然后,当用户单击编辑文本时,应该会出现键盘。

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

然后我尝试设置android:focusableInTouchMode="true",但是和上面一样

4

4 回答 4

22

In your DialogFragment onCreateView() add the following:

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;
}
于 2013-09-12T08:52:32.843 回答
2

这应该可以解决您的问题

android:windowSoftInputMode="stateHidden"

或者

android:windowSoftInputMode="stateUnchanged" 
于 2013-08-30T11:14:17.523 回答
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);
    }   

我认为这会奏效

于 2019-06-12T06:07:05.277 回答
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);
        }
    }
于 2019-03-15T09:33:21.170 回答