Невозможно скрыть виртуальную клавиатуру SearchView со значком по умолчанию (false)

У меня есть представление поиска, которое по умолчанию настроено как расширенное с поисковым запросом по умолчанию, но мне не нужна виртуальная клавиатура. В приведенном ниже коде я попытался скрыть клавиатуру в onCreateOptionsMenu, но клавиатура все еще видна.

imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    MenuItem item = menu.findItem(R.id.menu_search);
    item.expandActionView();
    mSearchView = (SearchView) item.getActionView();
    mSearchView.setIconifiedByDefault(false);
    mSearchView.setQuery(query, true);
    imm.hideSoftInputFromWindow(mSearchView.getWindowToken(), 0);

Я использую виджет поиска Sherlock. любое предложение скрыть виртуальную клавиатуру. Что я делаю неправильно?


person user1526671    schedule 24.04.2013    source источник


Ответы (7)


Вдохновленный ответом Парнита, я нашел лучший метод, который также работает и красивее:

mSearchView.clearFocus();
person Xieyi    schedule 06.03.2014
comment
Вы знаете, как можно снова открыть клавиатуру? - person Benjamin Scharbau; 09.11.2015

Изменить: я добавил лучшее решение сверху, но также сохранил старый ответ в качестве ссылки.

 @Override
        public boolean onQueryTextSubmit(String query) {

                  searchView.clearFocus();
            return false;
        }

Оригинальный ответ: я программировал с помощью setOnQueryTextListener. Когда вид поиска скрыт, клавиатура исчезает, а затем, когда она снова видна, клавиатура не появляется снова.

    //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;
        }

     });
person Parnit    schedule 20.08.2013
comment
Это работает для меня после того, как я попробовал десятки методов! Большое спасибо! - person Xieyi; 06.03.2014

пытаться

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
person kumar    schedule 24.04.2013
comment
+1. Или просто поместите android:windowSoftInputMode="stateAlwaysHidden" в манифест Android, если нет необходимости скрывать клавиатуру вручную. - person Volodymyr Kret; 29.04.2016

добавьте строку ниже в манифест для определенного действия.

 android:windowSoftInputMode="adjustPan|stateHidden"
person itsrajesh4uguys    schedule 24.04.2013
comment
С какой целью adjustPan здесь? Было бы недостаточно просто использовать только stateHidden? - person Prizoff; 24.04.2013
comment
с помощью AdjustPan текущий фокус никогда не закрывается клавиатурой. Для получения дополнительной информации перейдите сюда.. developer.android.com/guide/topics/manifest/ - person itsrajesh4uguys; 24.04.2013

простое решение его работы для моего добавления в XML:

 android:focusable="false"
person avi karbol    schedule 24.10.2017

В манифесте Android:

 android:windowSoftInputMode="adjustPan|stateHidden"

В классе откройте и закройте клавиатуру:

   @Override
  public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action buttons
      switch(item.getItemId()) {
case R.id.search:
         //TODO Whatever
          search.clearFocus();
         //Open and close the  keyboard
          InputMethodManager imm = (InputMethodManager)MyApplication.getAppContext().getSystemService(
                  Context.INPUT_METHOD_SERVICE);
          imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
          imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
          return true;
person chemalarrea    schedule 13.11.2014

вам просто нужно использовать: "object(edittext, searchview и т.д.)".clearfocus();

используйте его после создания поиска или действия. Пример: в методе OnQueryTextListener после этого использую поиск. Для просмотра в поиске.

person CRISTIAN ALEJANDRO ROBLES TORO    schedule 17.03.2019
comment
Как это улучшает другие ответы, в которых уже упоминается эта функция? - person Machavity♦; 17.03.2019