【问题标题】:Hide keyboard when showing DialogFragment on tablet?在平板电脑上显示 DialogFragment 时隐藏键盘?
【发布时间】:2013-09-03 01:37:38
【问题描述】:

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

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

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

【问题讨论】:

标签: android keyboard show-hide dialogfragment


【解决方案1】:

这应该可以解决您的问题

android:windowSoftInputMode="stateHidden"

android:windowSoftInputMode="stateUnchanged" 

【讨论】:

    【解决方案2】:

    在您的 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() 对我来说是关键。谢谢!
    • 在Android 4.4中当对话框是DataPickerFragment时它不起作用,我将隐藏键盘方法放在onResume()方法中并且它起作用。无论如何,谢谢。
    【解决方案3】:

    使用这个方法,它对我有用:

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

    【讨论】:

      【解决方案4】:

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

      我认为这会奏效

      【讨论】:

        猜你喜欢
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 2016-09-03
        • 2016-05-08
        • 1970-01-01
        • 2022-11-18
        • 2013-12-09
        • 2020-04-28
        相关资源
        最近更新 更多