Android 当用户触摸活动内的片段时隐藏键盘

Android 当用户触摸活动内的片段时隐藏键盘,android,android-fragments,keyboard,Android,Android Fragments,Keyboard,在.xml布局中,我有3个组件,顺序如下: 文本视图 片段(扩展ListFragment) 存储2个按钮的线性布局 每当用户使用搜索栏进行查询时,键盘就会出现。片段的内容将根据查询进行更新 我想做的是每当用户轻触屏幕(在键盘外面),键盘需要隐藏。到目前为止,我只能点击任何地方,而不是片段区域 我在片段中尝试了setOnTouchListener内部onActivityCreated(),但似乎不起作用 我在fragment=hidding键盘外点击,使用以下内部onCreate(): 隐藏板

在.xml布局中,我有3个组件,顺序如下:

  • 文本视图
  • 片段(扩展ListFragment)
  • 存储2个按钮的线性布局
每当用户使用搜索栏进行查询时,键盘就会出现。片段的内容将根据查询进行更新

我想做的是每当用户轻触屏幕(在键盘外面),键盘需要隐藏。到目前为止,我只能点击任何地方,而不是片段区域

我在片段中尝试了
setOnTouchListener
内部
onActivityCreated()
,但似乎不起作用

我在fragment=hidding键盘外点击,使用以下内部
onCreate()

隐藏板(视图)


但不是在碎片里面…

我犯了一个愚蠢的错误

以下代码将解决此问题: 内部
onActivityCreated()



编辑:Nevermind。。。。仅当查询显示零结果时,上述操作才起作用。如果它显示至少一个结果,触摸片段区域仍然不会隐藏键盘

我知道这有点晚了。根据我对你问题的理解,以下是解决方案。在onCreateView中使用以下代码

//hides keyboard when tap on the screen
    view.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction() == MotionEvent.ACTION_MOVE){
                //do something
                InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
            }
            return true;
        }
    });
public void hideKeyboard(View view)
    {
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        in.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
getActivity().findViewById(R.id.mid).setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View dview, MotionEvent ev)
            {
                f_hideKeyboard(dview);
                return false;
            }
        });
//hides keyboard when tap on the screen
    view.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction() == MotionEvent.ACTION_MOVE){
                //do something
                InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
            }
            return true;
        }
    });