SearchView
和操作栏仅适用于 Android 3.0 及
。要支持旧平台,您可以回退到搜索对话框。搜索对话框是
系统提供的界面,该界面在被调用时叠加到应用上。
设置最低 API 级别和目标 API 级别
要设置搜索对话框,请先在清单中声明您要支持旧版 但希望以 Android 3.0 或更高版本为目标平台。执行此操作后,您的应用 在 Android 3.0 或更高版本上自动使用操作栏,并在 Android 3.0 或更高版本上采用传统菜单系统 旧款设备:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
为旧设备提供搜索对话框
如需在旧设备上调用搜索对话框,请在用户选择搜索时调用 onSearchRequested()
从选项菜单中创建菜单项。由于搭载 Android 3.0 及更高版本的设备显示的是
操作栏中的 SearchView
(如第一课所示),仅限版本
调用 onOptionsItemSelected()
,
用户选择搜索菜单项。
Kotlin
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()
方法:
Kotlin
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; }