Şunu kullanmanızı öneririz:
SearchView
.
widget'ını uygulama çubuğunda bir öğe olarak kullanarak uygulamanızda arama işlevi sunabilirsiniz. Farklı
uygulama çubuğundaki tüm öğelerle birlikte SearchView
öğesini
her zaman veya yalnızca yer olduğunda
gösterilebilir. Aynı zamanda bunu
SearchView
öğesini simge olarak gösteren daraltılabilir işlem
bir arama alanı olarak kaplar ve ardından, kullanıcı yeniden
simgeye dokunur.
Uygulama çubuğuna SearchView'u ekleme
Uygulama çubuğuna bir SearchView
widget'ı eklemek için
res/menu/options_menu.xml
adlı projeye gidip aşağıdaki kodu ekleyin
dosyaya ekleyebilirsiniz. Bu kod, arama öğesinin nasıl oluşturulacağını tanımlar (örneğin,
başlık ekleyin. collapseActionView
özelliği
SearchView
genişleyerek uygulama çubuğunun tamamını kaplar ve
kullanımda olmadığında tekrar normal bir uygulama çubuğu öğesine daralır. RACI matrisinde
sınırlı uygulama çubuğu varsa
Daha iyi bir kullanıcı sunmak için collapsibleActionView
özelliği
sahip olacaksınız.
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/search" android:title="@string/search_title" android:icon="@drawable/ic_search" android:showAsAction="collapseActionView|ifRoom" android:actionViewClass="androidx.appcompat.widget.SearchView" /> </menu>
Daha erişilebilir bir arama simgesi istiyorsanız
/res/drawable
klasöründe ic_search.xml
dosya ve
şu kodu ekleyin:
<vector android:height="24dp" android:tint="#000000" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> <path android:fillColor="@android:color/white" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> </vector>
Uygulama çubuğunda SearchView
öğesini görüntülemek için XML menüsünü şişirin
res/menu/options_menu.xml
kaynağının
onCreateOptionsMenu()
yöntemini seçin:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) return true }
Uygulamayı çalıştırdığınızda şöyle bir şey oluşturulur:
SearchView
, uygulamanızın uygulama çubuğunda görünür ancak görünmüyor
çalışır. Arama simgesine dokunursanız şuna benzer bir şey görürsünüz:
SearchView
öğesini işlevsel hale getirmek için
SearchView
davranıyor.
Arama yapılandırması oluşturma
Arama
yapılandırması, SearchView
kodunun nasıl davrandığını belirtir
res/xml/searchable.xml
dosyasında tanımlanmıştır. Arama yapılandırması
en azından aşağıdaki özelliklere sahip bir android:label
özelliği içermelidir:
özelliğinin android:label
özelliğiyle aynı
<uygulama>
veya <activity>
öğesini eklemeniz gerekir. Bununla birlikte,
Kullanıcıya ne gireceği hakkında fikir vermek için android:hint
özelliği
yazarsınız.
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_name" android:hint="@string/search_hint" />
Uygulamanızın manifest dosyasında
<meta-data>
öğesi (res/xml/searchable.xml
dosyasına işaret eden) içerir. Tanımlayın
öğesini görüntülemek istediğiniz bir <activity>
içinde
SearchView
.
<activity android:name=".SearchResultsActivity" android:exported="false" android:label="@string/title_activity_search_results" android:launchMode="singleTop" android:theme="@style/Theme.AppCompat.Light"> <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity>
Oluşturduğunuz onCreateOptionsMenu()
yönteminde,
şunu çağırarak SearchView
ile arama yapılandırmasını
setSearchableInfo(SearchableInfo)
:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchView = menu.findItem(R.id.search).actionView as SearchView val component = ComponentName(this, SearchResultsActivity::class.java) val searchableInfo = searchManager.getSearchableInfo(component) searchView.setSearchableInfo(searchableInfo) return true }
Hedef
getSearchableInfo()
.
sahip olur
SearchableInfo
nesnesini ifade eder. Arama
yapılandırması SearchView
ve
kullanıcı bir sorgu gönderdiğinde SearchView
,
ACTION_SEARCH
isteyebilirsiniz. Ardından, bu amaca yönelik filtre uygulayacak ve
anlamına gelir.
Aranabilir etkinlik oluşturun
ACTION_SEARCH
amacı ve
Sorgu bir veri kümesinde arama yapar. Aranabilir etkinlik oluşturmak için şunu beyan edin:
ACTION_SEARCH
için filtrelemek istediğiniz bir etkinlik
amaç:
<activity android:name=".SearchResultsActivity" ... > ... <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> ... </activity>
Aranabilir etkinliğinizde ACTION_SEARCH
amacını şu şekilde ele alın:
program yönetiminde
onCreate()
yöntemidir.
Kotlin
class SearchResultsActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_search_results) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { val query = intent.getStringExtra(SearchManager.QUERY) Log.d("SEARCH", "Search query was: $query") } } }
Artık SearchView
, kullanıcının sorgusunu kabul ederek
ACTION_SEARCH
amacıyla aranabilir etkinlik.
Arama sorgusunu aldıktan sonra,
ViewModel
katmanını kullanarak diğer katmanlarda kullanabilirsiniz.
hangi mimariyi geliştireceğinizi
öğrenmeniz gerekir.