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

时间:2015-03-22 08:17:12

标签: android android-fragments keyboard

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

  • Textview
  • 片段(扩展ListFragment)
  • 存储2个按钮的LinearLayout

每当用户使用搜索栏进行查询时,都会出现键盘。片段的内容将根据查询进行更新。

我尝试做什么是指用户点击屏幕(键盘外),需要隐藏键盘。到目前为止,我只能点击但片段区域

我在片段内的setOnTouchListener内尝试onActivityCreated(),但它似乎无法正常工作。

我在fragment = hidding键盘外部使用onCreate()内的以下内容进行操作:

layout.setOnTouchListener(new View.OnTouchListener()
{
   @Override
   public boolean onTouch(View view, MotionEvent ev)
   {
      hideKeyboard(view);
      return false;
   }
});

hideKeyboard(查看视图)

public void hideKeyboard(View view)
    {
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        in.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }

但不在片段内...

2 个答案:

答案 0 :(得分:0)

我犯了一个愚蠢的错误......

以下代码可以解决此问题: 在onActivityCreated()

getActivity().findViewById(R.id.mid).setOnTouchListener(new View.OnTouchListener()
        {
            @Override
            public boolean onTouch(View dview, MotionEvent ev)
            {
                f_hideKeyboard(dview);
                return false;
            }
        });

已编辑:没关系......上述内容仅在查询显示为零时才有效。如果它显示至少1个结果,则触摸片段区域仍然不会隐藏键盘

答案 1 :(得分:0)

我知道有点晚了。根据我对你的问题的理解,下面是解决方案。在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;
        }
    });