SearchView ve işlem çubuğu yalnızca Android 3.0 ve sonraki sürümlerde kullanılabilir. Daha eski platformları desteklemek için arama iletişim kutusuna geri dönebilirsiniz. Arama iletişim kutusu, çağrıldığında uygulamanızın üzerine yerleştirilen sistem tarafından sağlanan bir kullanıcı arayüzüdür.
Minimum ve hedef API düzeylerini ayarlama
Arama iletişim kutusunu ayarlamak için önce manifestinizde eski cihazları desteklemek istediğinizi ancak Android 3.0 veya sonraki sürümleri hedeflemek istediğinizi belirtin. Bu işlemi yaptığınızda uygulamanız Android 3.0 veya sonraki sürümlerde otomatik olarak işlem çubuğunu, daha eski cihazlarda ise geleneksel menü sistemini kullanır:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Eski Cihazlar İçin Arama İletişim Kutusunu Sağlama
Eski cihazlarda arama iletişim kutusunu çağırmak için kullanıcı seçenekler menüsünden arama menü öğesini her seçtiğinde onSearchRequested() işlevini çağırın. Android 3.0 ve sonraki sürümlerdeki cihazlar işlem çubuğunda SearchView simgesini gösterdiğinden (ilk derste gösterildiği gibi), yalnızca 3.0'dan eski sürümlerde kullanıcı arama menüsü öğesini seçtiğinde onOptionsItemSelected() çağrılır.
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; } }
Çalışma zamanında Android derleme sürümünü kontrol etme
Çalışma zamanında, eski cihazlarda SearchView'nın desteklenmeyen bir şekilde kullanılmadığından emin olmak için cihaz sürümünü kontrol edin. Örnek kodumuzda bu işlem, onCreateOptionsMenu() yönteminde gerçekleşir:
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; }