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

问题描述 投票:9回答:4

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

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

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

android keyboard show-hide dialogfragment
4个回答
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
投票

这应该可以解决您的问题

android:windowSoftInputMode="stateHidden"

要么

android:windowSoftInputMode="stateUnchanged" 

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

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

我认为这会奏效

© www.soinside.com 2019 - 2024. All rights reserved.