Как отклонить клавиатуру в Android SearchView? - PullRequest
54 голосов
/ 14 сентября 2011

У меня есть searchView в ActionBar.Я хочу отклонить клавиатуру, когда пользователь закончил ввод.У меня есть следующий queryTextListener на searchView

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextChange(String newText) { 
        // Do something 
        return true; 
    } 

    @Override 
    public boolean onQueryTextSubmit(String query) {

        showProgress();
        // Do stuff, make async call

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

        return true; 
    } 
};

На основе подобных вопросов следующий код должен отклонить клавиатуру, но в этом случае он не работает:

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

IТакже пробовал:

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

Ни один не работает.Я не уверен, является ли это специфической проблемой Сота, или она связана с searchView в ActionBar, или с обоими.Кто-нибудь получил это работает или знает, почему он не работает?

Ответы [ 13 ]

0 голосов
/ 14 июня 2018

Почему бы вам не попробовать это? Когда вы касаетесь кнопки X, вы активируете фокус на поиске, несмотря ни на что.

ImageView closeButton = (ImageView)searchView.findViewById(R.id.search_close_btn);
        closeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EditText et = (EditText) findViewById(R.id.search_src_text);
                et.setText("");`enter code here`
                searchView.setQuery("", false);
                searchView.onActionViewCollapsed();
                menuSearch.collapseActionView();
            }
        });
0 голосов
/ 29 декабря 2016

Ниже код работает для меня, чтобы скрыть клавиатуру в Searchview

MenuItem searchItem = baseMenu.findItem(R.id.menuSearch);

edtSearch= (EditText) searchItem.getActionView().findViewById(R.id.search_src_text);

MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() {
                        @Override
                        public boolean onMenuItemActionExpand(MenuItem item) {
                            edtSearch.post(new Runnable() {
                                @Override
                                public void run() {
                                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                                    imm.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
                                }
                            });
                            return true;
                        }

                        @Override
                        public boolean onMenuItemActionCollapse(MenuItem item) {
                            return true;
                        }
                    });
0 голосов
/ 05 ноября 2015

Два решения, которые работали для меня, первое с использованием экземпляра SearchView:

private void hideKeyboard(){
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
}

Второе решение:

private void hideKeyboard(){
            InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
            inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
 }
...