How to dismiss keyboard in Android SearchView?

后端 未结 15 1342
萌比男神i
萌比男神i 2020-12-05 06:27

I have a searchView in the ActionBar. I want to dismiss the keyboard when the user is done with input. I have the following queryTextListener on the searchView



        
相关标签:
15条回答
  • 2020-12-05 06:51

    if someone is looking how to collpase searchView/keyboard, use below code

         /*
            setup close button listener
         */
        searchView.findViewById<ImageView>(R.id.search_close_btn).setOnClickListener {
            adapter.filter(null)//reset default list
            searchView.onActionViewCollapsed() //collapse SearchView/Keyboard
            true
        }
    
        /*
            setup text change listener
         */
        searchView.setOnQueryTextListener(object:SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(query: String?): Boolean {
    
                adapter.filter(if(query.isNullOrEmpty()) "" else query)
    
                searchView.onActionViewCollapsed() //collapse SearchView/Keyboard
                return true
            }
    
            override fun onQueryTextChange(newText: String?): Boolean {
                adapter.filter(if(newText.isNullOrEmpty()) "" else newText)
                return true
            }
        })
    
    0 讨论(0)
  • 2020-12-05 06:52

    Simple, straight to the point and clean:

      @Override
      public boolean onQueryTextSubmit(String query) {
          // your search methods
          searchView.clearFocus();
          return true;
      }
    
    0 讨论(0)
  • 2020-12-05 06:53

    In a tablet app I'm working on with a dual pane activity, I've wrote only

    f.getView().requestFocus(); // f is the target fragment for the search

    and that was enough to dismiss the soft keyboard after a search. No need to use InputMethodManager

    0 讨论(0)
  • 2020-12-05 06:53

    I used ActionBarSherlock 4.3 and I have a ProgressDialog. When I dismiss it in postExecute method, Searchview gain focus. To fix that:

    //Handle intent and hide soft keyboard
        @Override
        protected void onNewIntent(Intent intent) {
            setIntent(intent);
            handleIntent(intent);
            searchView.setQuery("", false);
            searchView.setIconified(true);
            searchView.clearFocus();
        }
    
        /*When dismiss ProgressDialog, searchview gain focus again and shows the keyboard. I  call clearFocus() to avoid it.*/
    
        AsyncTask.onPostExecute(){
          if(pd!=null)
            pd.dismiss();
          if(searchView!=null)
            searchView.clearFocus();
        }
    

    Hope it helps.

    0 讨论(0)
  • 2020-12-05 06:54

    Somehow it works if you call

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

    and then

    otherWidget.requestFocus();
    
    0 讨论(0)
  • 2020-12-05 06:57

    Edit: I added the better solution on top, but also kept the old answer as a reference.

     @Override
            public boolean onQueryTextSubmit(String query) {
    
                      searchView.clearFocus();
                return false;
            }
    

    Original Answer: I programmed using a setOnQueryTextListener. When the searchview is hidden the keyboard goes away and then when it is visible again the keyboard does not pop back up.

        //set query change listener
         searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
            @Override
            public boolean onQueryTextChange(String newText) {
                // TODO Auto-generated method stub
                return false;
            }
    
            @Override
            public boolean onQueryTextSubmit(String query) {
                /**
                 * hides and then unhides search tab to make sure keyboard disappears when query is submitted
                 */
                      searchView.setVisibility(View.INVISIBLE);
                      searchView.setVisibility(View.VISIBLE);
                return false;
            }
    
         });
    
    0 讨论(0)
提交回复
热议问题