【问题标题】:Hide keyboard after user searches?用户搜索后隐藏键盘?
【发布时间】:2012-03-24 19:04:09
【问题描述】:

我有一个活动,其中有一个 EditText,并且在输入键时显示搜索结果,所以我只想在搜索结果即将显示时关闭键盘,以防止用户必须这样做。但是,如果用户想要优化他的搜索,如果他再次点击 EditText,键盘应该会重新打开。

这比我想象的要困难,我一直在搜索并尝试了一些最重要的事情,甚至没有关闭我的 HTC 上的键盘,一种将 InputType 设置为 INPUT_NULL 的方法关闭了键盘,但它没有之后就打不开了。

关于如何做到这一点的任何建议?

【问题讨论】:

  • 不要以为是重复的,这个问题是关于按下键盘上的搜索按钮后隐藏键盘的问题。仅仅知道如何隐藏它的代码并没有帮助,因为你不知道该把代码放在哪里。

标签: android android-layout android-edittext android-keypad


【解决方案1】:
@Override
public boolean onQueryTextSubmit(String query) {
    // Your search methods

    searchView.clearFocus();
    return true;
}

直截了当,干净利落。

【讨论】:

  • 当搜索编辑文本为空时,不会调用 onQueryTextSubmit 的问题。因此,如果您正在寻找一种即使搜索字段为空也可以关闭键盘的方法。
【解决方案2】:

正确的做法:

  1. set imeOptions"actionSearch"
  2. 初始化输入和搜索按钮的侦听器(如果提供)

    searchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                performSearch();
                return true;
            }
    
            return false;
        }
    });
    view.findViewById(R.id.bigSearchBar_button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            performSearch();
        }
    });
    
  3. 当用户点击搜索时隐藏键盘。为了确保在用户最小化和恢复Activity 时不会显示键盘,您必须从EditText 移除焦点

    private void performSearch() {
        searchEditText.clearFocus();
        InputMethodManager in = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
        ... perform search ...
    }
    

【讨论】:

  • 感谢您提供非常简单和好的解决方案!
【解决方案3】:

我相信这段代码 sn-p 会关闭键盘:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

如果不试试这个:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

让我知道这些是否有效

【讨论】:

  • 第一个应该可以工作,尽管你应该先做myTextEdit.clearFocus()。请参阅@Miro 答案。
猜你喜欢
  • 1970-01-01
  • 2011-03-08
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多