SearchView
và thanh thao tác chỉ có trên Android 3.0 và
sau. Để hỗ trợ các nền tảng cũ, bạn có thể quay lại hộp thoại tìm kiếm. Hộp thoại tìm kiếm là một
do hệ thống cung cấp, lớp phủ trên ứng dụng của bạn khi được gọi.
Đặt cấp độ API tối thiểu và API mục tiêu
Để thiết lập hộp thoại tìm kiếm, trước tiên hãy khai báo trong tệp kê khai rằng bạn muốn hỗ trợ phiên bản cũ hơn thiết bị, nhưng muốn nhắm mục tiêu phiên bản Android 3.0 trở lên. Khi bạn làm như vậy, ứng dụng của bạn tự động sử dụng thanh tác vụ trên Android 3.0 trở lên và sử dụng hệ thống trình đơn truyền thống trên thiết bị cũ hơn:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Cung cấp hộp thoại tìm kiếm cho thiết bị cũ
Để gọi hộp thoại tìm kiếm trên các thiết bị cũ hơn, hãy gọi onSearchRequested()
mỗi khi người dùng chọn công cụ tìm kiếm
mục trong trình đơn từ trình đơn tuỳ chọn. Vì các thiết bị Android 3.0 trở lên cho thấy
SearchView
trong thanh thao tác (như minh hoạ trong bài học đầu tiên), chỉ có phiên bản
phiên bản cũ hơn 3.0 sẽ gọi onOptionsItemSelected()
khi
người dùng chọn mục trong trình đơn tìm kiếm.
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; } }
Kiểm tra Phiên bản bản dựng Android trong Thời gian chạy
Trong thời gian chạy, hãy kiểm tra phiên bản thiết bị để đảm bảo việc sử dụng SearchView
không được hỗ trợ không xảy ra trên các thiết bị cũ. Trong mã ví dụ, điều này xảy ra trong
phương thức 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; }