Есть ли способ избежать полноэкранного поиска SearchView / Keyboard на ландшафте?

Я пытаюсь избежать редактирования полноэкранного экрана на ландшафт, чтобы получить доступ к предложениям.

Я уже прочитал много потоков, объясняющих, что мне нужно добавлять флаги EditorInfo, такие как flagNoFullscreen и / или флагNoExtractUi .

Я добавил их программно, но не очень полезен.

Есть ли способ понять это?

Мне потребовалось некоторое время, чтобы понять это, но на самом деле это довольно просто.

Первоначально я создал собственный класс, который расширил класс SearchView и использовал переопределение onCreateInputConnection() , однако я не мог заставить его работать таким образом.

В конечном итоге я получил работу более простым способом, всего лишь двумя добавленными строками кода.

Вам просто нужно вызвать search.getImeOptions() чтобы получить текущую конфигурацию, а затем «или» результат с помощью EditorInfo.IME_FLAG_NO_EXTRACT_UI с вызовом setImeOptions() :

 search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Если вы не используете «или» с существующими опциями, то вы не получите кнопку «Поиск» в правом нижнем углу, вместо этого вы получите кнопку «Готово».

Вот полный параметр onCreateOptionsMenu() который я использовал для проверки (я использовал SearchView в xml, но это решение должно работать для вас, даже если вы не раздуваете свой SearchView из xml):

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView(); SearchableInfo si = manager.getSearchableInfo(getComponentName()); //Here is where the magic happens: int options = search.getImeOptions(); search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI); //!!!!!!!!!!! search.setSearchableInfo(si); search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String query) { return true; } }); return true; } 

Вот xml, который я использовал для SearchView в menu_main.xml:

 <item android:id="@+id/action_search" android:title="Search" android:icon="@android:drawable/ic_menu_search" app:showAsAction="ifRoom" app:actionViewClass="android.support.v7.widget.SearchView" /> 

Результат без вызова setImeOptions() :

До

Результат с вызовом setImeOptions() :

Введите описание изображения здесь

Intereting Posts