Панель SearchView и панель действий доступны только на Android 3.0 и более поздних версиях. Для поддержки более старых платформ можно использовать диалоговое окно поиска. Диалоговое окно поиска — это системный пользовательский интерфейс, который накладывается поверх вашего приложения при вызове.
Установите минимальный и целевой уровни API.
Для настройки диалогового окна поиска сначала укажите в манифесте, что вы хотите поддерживать старые устройства, но ориентироваться на Android 3.0 или более поздние версии. В этом случае ваше приложение автоматически будет использовать панель действий на Android 3.0 или более поздних версиях и традиционную систему меню на более старых устройствах.
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Предоставить возможность поиска для более старых устройств
Чтобы вызвать диалоговое окно поиска на более старых устройствах, вызывайте метод onSearchRequested() всякий раз, когда пользователь выбирает пункт меню поиска из меню параметров. Поскольку на устройствах Android 3.0 и выше SearchView отображается в панели действий (как показано в первом уроке), метод onOptionsItemSelected() вызывается только в версиях старше 3.0, когда пользователь выбирает пункт меню поиска.
Котлин
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.search -> { onSearchRequested() true } else -> false } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); return true; default: return false; } }
Проверьте версию сборки Android во время выполнения.
Во время выполнения проверьте версию устройства, чтобы убедиться, что на старых устройствах не будет использоваться неподдерживаемый компонент SearchView . В нашем примере кода это происходит в методе onCreateOptionsMenu() :
Котлин
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager (menu.findItem(R.id.search).actionView as SearchView).apply { setSearchableInfo(searchManager.getSearchableInfo(componentName)) setIconifiedByDefault(false) } } return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); } return true; }
