Uygulamanıza arama işlevi eklemeye hazır olduğunuzda Android, kullanıcı arayüzünü, sayfanın en üstünde görüntülenen bir arama iletişim kutusuyla uygulayın bir arama widget'ı veya etkinlik penceresi açın. Hem arama iletişim kutusu hem de widget, kullanıcının arama sorgusunu tespit edebilirsiniz. Bu şekilde, kullanıcı herhangi bir yerden arama arama iletişim kutusunun veya widget'ın bulunduğu ve sistemin, uygun etkinliği seçip sonuçları sunabilir.
Arama iletişim kutusu ve widget için kullanılabilen diğer özellikler şunlardır:
- Sesli arama
- Son sorgulara dayalı arama önerileri
- Uygulama verilerinizdeki gerçek sonuçlarla eşleşen arama önerileri
Bu dokümanda, uygulamanızı arama arayüzü sağlayacak şekilde nasıl ayarlayacağınız gösterilmektedir arama sorgularını sunmak için Android sistemi tarafından desteklenen iletişim kutusunu veya arama widget'ını tıklayın.
İlgili kaynaklar:
Temel bilgiler
Başlamadan önce, arama arayüzünüzü uygulamak isteyip istemediğinize karar verin arama iletişim kutusunu veya arama widget'ını kullanarak. Aynı arama motorunu sunarlar biraz farklı şekillerde ele alabilirsiniz:
- Arama iletişim kutusu, bir kullanıcı arayüzü bileşeni olan ve
Android sistemi. Kullanıcı tarafından etkinleştirildiğinde, arama iletişim kutusu şu konumda görünür:
bir bildirim görürsünüz.
Android sistemi, arama iletişim kutusundaki tüm etkinlikleri kontrol eder. bir sorgu gönderdiğinde sistem, sorguyu gerçekten belirtebilirsiniz. İletişim kutusu, aynı zamanda öneriler gösterilir.
- Arama widget'ı bir
SearchView
herhangi bir yere koyabilirsiniz. Varsayılan olarak, arama widget'ı bir standartEditText
. widget'ı kullanabilir ve hiçbir şey yapmaz ancak widget'ı Android'in sistem tüm giriş etkinliklerini işler, sorguları uygun sağlar ve tıpkı aramada olduğu gibi, arama önerileri sunar. iletişim kutusu.
Kullanıcı, arama iletişim kutusundan veya arama widget'ından arama yaptığında
sistem,
Intent
ve
kullanıcı sorgusunu burada saklar. Sistem daha sonra otomatik olarak
aramaları ("aranabilir etkinlik") ele aldığını bildirir ve bunu yayınlar
düşünmelisiniz. Uygulamanızı bu tür destekli arama için ayarlamak üzere
takip etmek için:
- Arama yapılandırması
- Arama iletişim kutusu veya widget'la ilgili bazı ayarları yapılandıran XML dosyası. Bu bölüm, sesli arama, arama önerisi, ve ipucu metnini girin.
- Aranabilir bir etkinlik
Activity
Arama sorgusunu alan, verilerinizde arama yapan ve aramayı görüntüleyen sonuç.- Aşağıdakilerden biri tarafından sağlanan bir arama arayüzü:
- Arama iletişim kutusu
- Arama iletişim kutusu varsayılan olarak gizlidir. Ekranın en tepesinde aradığında filtrele
onSearchRequested()
. Kullanıcı Ara düğmenize dokunduğunda.SearchView
widget- Arama widget'ını kullanmanız, arama kutusunu sayfanızın içinde herhangi bir yere koymanıza etkinliği (uygulama çubuğunda işlem görünümü gibi)
Bu dokümanın geri kalanında, arama yapılandırmasını nasıl oluşturacağınız açıklanmaktadır. ve aranabilir etkinlik ile bir arama arayüzünün nasıl uygulanacağını arama iletişim kutusu veya arama widget'ı.
Aranabilir bir yapılandırma oluşturma
İlk ihtiyacınız olan,
arama yapılandırması.
Arama iletişim kutusunun veya widget'ın belirli kullanıcı arayüzü özelliklerini yapılandırır ve
bazı özelliklerin nasıl davrandığını kontrol edin. Bu dosya, geleneksel olarak
searchable.xml
adında ve res/xml/
uygulamasına kaydedilmelidir
proje dizinini oluşturur.
Arama yapılandırma dosyası
<searchable>
öğesini kök düğümü olarak belirleyin ve aşağıda gösterildiği gibi bir veya daha fazla özellik belirtin:
şu örneği inceleyin:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/app_label" android:hint="@string/search_hint" > </searchable>
Gerekli tek özellik android:label
özelliğidir. Google
bir dize kaynağına işaret eder. Bu kaynak, uygulama adı olmalıdır. Bu etiket
Siz adresindeki Hızlı Arama Kutusu için arama önerilerini etkinleştirene kadar, kullanıcı tarafından görülebilir.
Etiketin sistemdeki Aranabilir öğeler listesinde görünür hale gelmesi
Ayarlar'da devre dışı bırakabilirsiniz.
Zorunlu olmasa da her zaman
android:hint
özelliği (ör. aramada bir ipucu dizesi sağlar)
kutucuğunu görebilirsiniz. Bu ipucu önemlidir çünkü
hakkında kullanıcılara önemli ipuçları verebilir.
<searchable>
öğesi, başka birkaç özelliği kabul eder.
Ancak,
arama önerileri ve
sesli arama. Ayrıntılı bilgi için
yapılandırma dosyasını incelemek için
Arama yapılandırması
referans belgedir.
Aranabilir etkinlik oluşturun
Aranabilir etkinlik, uygulamanızda performans gösteren Activity
metriğidir
bir sorgu dizesine göre arama yapar ve arama sonuçlarını sunar.
Kullanıcı, arama iletişim kutusunda veya widget'ta arama yaptığında, sistem
aranabilir etkinliğinizi başlatır ve en kısa sürede
Intent
ACTION_SEARCH
eyleme dökülebilir. Aranabilir etkinliğiniz, sorguyu Intent'in
QUERY
.
ekstra, ardından verilerinizi arar ve sonuçları sunar.
Arama iletişim kutusunu veya widget'ını hangi etkinliğin aranabilir etkinliğiniz olduğunu bilmesi gerekir. Böylece, düzgün şekilde teslim etmesini sağlar. Bu nedenle, önce arama yapılabilir etkinliği olması gerekir.
Aranabilir etkinlik bildirme
Henüz yoksa, performans gösteren bir Activity
oluşturun
ve sonuçları gösterir. Arama özelliğini uygulamanız
işlevini kullanın. Tek yapmanız gereken,
manifest'ini kullanabilirsiniz. Manifest dosyasının içinde
<activity>
öğesini seçerseniz aşağıdakileri yapın:
- Şuradaki
ACTION_SEARCH
amacını kabul etmek için etkinliği beyan edin:<intent-filter>
öğesine dokunun. - Bir
<meta-data>
. öğesine dokunun.
Bu, aşağıdaki örnekte gösterilmektedir:
<application ... > <activity android:name=".SearchableActivity" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> ... </application>
<meta-data>
öğesi
Şu değere sahip android:name
özelliği:
"android.app.searchable"
ve android:resource
özelliğini kullanabilirsiniz.
önceki örnekte res/xml/searchable.xml
,
dosyası olarak kaydedebilirsiniz.
Arama gerçekleştirme
Manifest'te aranabilir etkinliğinizi bildirdikten sonra şu adımları uygulayın: aranabilir etkinliğinizde arama yapma prosedürü:
Sorguyu alma
Kullanıcı, arama iletişim kutusundan veya widget'tan arama yaptığında, sistem
aranabilir etkinliğinizi başlatır ve ACTION_SEARCH
gönderir
isteyebilirsiniz. Bu amaç, arama sorgusunu QUERY
dizesinde taşır
ekstra Etkinlik başladığında bu niyeti kontrol edin ve dizeyi çıkarın.
Örneğin, arama yapılabilir hale geldiğinde arama sorgusunu nasıl alabileceğiniz aşağıda
etkinlik başlangıcı:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.search) // Verify the action and get the query. if (Intent.ACTION_SEARCH == intent.action) { intent.getStringExtra(SearchManager.QUERY)?.also { query -> doMySearch(query) } } }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); // Get the intent, verify the action, and get the query. Intent intent = getIntent(); if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doMySearch(query); } }
QUERY
dizesi her zaman
Amacı ACTION_SEARCH
. Yukarıdaki örnekte sorgu
alındı ve yerel bir doMySearch()
yöntemine geçirildi.
gerçek arama işlemi yapılır.
Verilerinizde arama yapın
Verilerinizi depolama ve arama işlemi uygulamanıza özgüdür. Şunları yapabilirsiniz: pek çok farklı şekilde saklayabilir ve arayabilirsiniz. Bu dokümanda size bunun nasıl yapıldığı gösterilmemektedir. İhtiyaçlarınız ve verileriniz açısından verilerinizi nasıl depolayacağınızı ve aradığınızı göz önünde bulundurun biçimindedir. Aşağıda, uygulayabileceğiniz ipuçları verilmiştir:
- Verileriniz cihazdaki bir SQLite veritabanında depolanıyorsa
tam metin araması (
LIKE
yerine FTS3 kullanılarak) sorgusuna örnek olarak verebiliriz: Metin verilerinde daha sağlam bir arama ve sonuçları önemli ölçüde daha hızlı üretir. Görüntüleyin sqlite.org: FTS3 veSQLiteDatabase
sınıfını da inceleyebilirsiniz. - Verileriniz çevrimiçi ortamda depolanırsa, algılanan arama performansı
Kullanıcının veri bağlantısı tarafından engellenmelidir. Bir projenin
devam edin. Görüntüleyin
android.net
. ağ API'leri referansı için veProgressBar
başlıklı bölüme bakın.
Sonuçları sunma
Verilerinizin nerede bulunduğu ve nasıl arama yaptığınız fark etmeksizin,
arama sonuçlarını,
Adapter
Bu
tüm arama sonuçlarını tek bir sayfada
RecyclerView
Verileriniz bir SQLite veritabanı sorgusundan geliyorsa sonuçlarınızı bir
RecyclerView
kullanarak
CursorAdapter
.
Verileriniz farklı bir biçimde geliyorsa, istediğiniz zaman
BaseAdapter
Adapter
, bir veri kümesindeki her öğeyi
View
nesne algılandı. Zaman
Adapter
, her parça için bir RecyclerView
uygulanır
listesi, ayrı bir görünüm olarak eklenir. Adapter
yalnızca bir arayüz oluşturuyor. Bu nedenle,
CursorAdapter
-
Cursor
-
gerekir. Mevcut uygulamalardan hiçbiri verileriniz için işe yaramazsa şunu yapabilirsiniz:
BaseAdapter
kaynağından kendi uygulamanızı uygulayın.
Arama iletişim kutusunu kullanma
Arama iletişim kutusu, ekranın üst kısmında kayan bir arama kutusu sağlar. uygulama simgesiyle de karşılaşabilirsiniz. Arama iletişim kutusu, arama önerileri sunabilir yazın. Kullanıcı bir arama yaptığında, sistem, aramayı arama yapan bir etkinliğe dönüştürülür.
Varsayılan olarak, kullanıcı tarafından etkinleştirilene kadar arama iletişim kutusu her zaman gizlidir.
Uygulamanız, şunu çağırarak arama iletişim kutusunu etkinleştirebilir:
onSearchRequested()
Ancak bu yöntem siz doğrulama işlemini yapana kadar
etkinlikle ilgili arama iletişim kutusunu etkinleştirin.
Arama iletişim kutusunun arama yapması için etkinleştirmek üzere, sisteme
Aranabilir etkinlik, arama iletişim kutusundan arama sorguları almalıdır. Örneğin,
önceki bölümde
araştırılabilir bir etkinlik oluşturarak, bu etkinlik
SearchableActivity
adlı etkinlik oluşturuldu. Bir
göstermek için "OtherActivity
" gibi ayrı bir etkinlik
arama iletişim kutusu ve SearchableActivity
için arama teslim et, şunu bildir:
manifestoda SearchableActivity
öğesinin aranabilir etkinlik olduğunu
Bu düğme, OtherActivity
uygulamasındaki arama iletişim kutusunda kullanılacak.
Bir etkinliğin arama iletişim kutusu için aranabilir etkinliği bildirmek üzere
<meta-data>
öğesi,
<activity>
öğesi. <meta-data>
öğesi,android:value
aranabilir etkinliğin sınıf adı ve android:name
özelliği
"android.app.default_searchable"
değerine ayarlanır.
Örneğin, burada hem aranabilir etkinlik hem de
SearchableActivity
ve başka bir etkinlik,
SearchableActivity
kullanan OtherActivity
,
arama iletişim kutusundan yürütülen aramaları gerçekleştirme:
<application ... > <!-- This is the searchable activity; it performs searches. --> <activity android:name=".SearchableActivity" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity> <!-- This activity enables the search dialog to initiate searches in the SearchableActivity. --> <activity android:name=".OtherActivity" ... > <!-- Enable the search dialog to send searches to SearchableActivity. --> <meta-data android:name="android.app.default_searchable" android:value=".SearchableActivity" /> </activity> ... </application>
Çünkü OtherActivity
artık bir
Aranabilir etkinlikleri tanımlamak için <meta-data>
öğesi
arama için kullanılırsa etkinlik, arama iletişim kutusunu etkinleştirir. Kullanıcı
Bu etkinlikte, onSearchRequested()
yöntemi
Arama iletişim kutusu. Kullanıcı, aramayı gerçekleştirdiğinde sistem,
SearchableActivity
ve ACTION_SEARCH
olarak sunuyor
isteyebilirsiniz.
Uygulamanızdaki her etkinliğin arama iletişim kutusunu sunmasını istiyorsanız
önceki <meta-data>
öğesi,
<application>
öğesini kullanın.<activity>
Böylece her etkinlik,
değeri devralır, arama iletişim kutusunu sağlar ve aramaları
aynı olabilir. Birden fazla aranabilir etkinliğiniz varsa şunları yapabilirsiniz:
farklı bir öğe yerleştirerek varsayılan aranabilir etkinliği geçersiz kılabilir
Bağımsız etkinliklerde <meta-data>
beyanı.
Etkinlikleriniz için artık arama iletişim kutusu etkinleştirildiğinde, uygulamanız artık yardımcı olabilir.
Arama iletişim kutusunu çağır
Bazı cihazlar özel bir arama düğmesi sağlasa da
düğmesi cihazlara bağlı olarak değişebilir ve birçok cihaz bir arama sağlamaz
olduğunu varsayalım. Bu nedenle, arama iletişim kutusunu kullanırken
öğesini çağırarak arama iletişim kutusunu etkinleştiren kullanıcı arayüzünüz
onSearchRequested()
Örneğin, sayfanıza bir arama düğmesi
seçenekler menüsü veya kullanıcı arayüzü düzeni
onSearchRequested()
.
Ayrıca "aramak için yazın" özelliğini de etkinleştirebilirsiniz işlevini etkinleştiren
kullanıcı klavyede yazmaya başladığında arama iletişim kutusu. Tuş vuruşları:
eklenir. Etkinliğinizde yaz ve ara özelliğini etkinleştirebilirsiniz
telefonla arayarak
setDefaultKeyMode
veya
DEFAULT_KEYS_SEARCH_LOCAL
: şu süre içinde:
etkinliğinin
onCreate()
yöntemidir.
Arama iletişim kutusunun etkinlik yaşam döngünüz üzerindeki etkisi
Arama iletişim kutusu
Kayan Dialog
dokunun. Etkinlik yığınında herhangi bir değişikliğe neden olmaz.
iletişim kutusu göründüğünde
onPause()
-
çağrıldı. Giriş odağı
Arama iletişim kutusu.
Arama iletişim kutusu etkinleştirildiğinde bildirim almak istiyorsanız
onSearchRequested()
yöntemini çağırın. Sistem bu yöntemi çağırdığında
etkinliğinizin arama iletişim kutusuna giriş odağını kaybettiğini gösterir. Bu nedenle,
oyunu duraklatmak gibi etkinlik için uygun işleri yapabilirsiniz. Aksi hâlde
arama bağlamını iletiyorsunuz
verileri (bu belgenin başka bir bölümünde ele alınan)
yöntemini çağırın:
Kotlin
override fun onSearchRequested(): Boolean { pauseSomeStuff() return super.onSearchRequested() }
Java
@Override public boolean onSearchRequested() { pauseSomeStuff(); return super.onSearchRequested(); }
Kullanıcı Geri düğmesine dokunarak aramayı iptal ederse arama iletişim kutusu
kapanır ve etkinlik, giriş odağını yeniden kazanır. Bildirim almak için kaydolabilirsiniz
arama iletişim kutusu
setOnDismissListener()
,
setOnCancelListener()
,
ya da her ikisi de olabilir. Yalnızca
OnDismissListener
,
çünkü arama iletişim kutusu her kapatıldığında çağrılır. İlgili içeriği oluşturmak için kullanılan
OnCancelListener
.
Yalnızca kullanıcının arama iletişim kutusundan açıkça çıktığı olaylarla ilgilidir. Dolayısıyla,
bir arama yürütüldüğünde çağrılmaz. Arama yürütüldüğünde,
arama iletişim kutusu otomatik olarak kaybolur.
Geçerli etkinlik aranabilir etkinlik değilse, normal
etkinlik yaşam döngüsü etkinlikleri, kullanıcı belirli bir
arama: Geçerli etkinlik, açıklandığı gibi onPause()
alır
Giriş
etkinlikler hakkında daha fazla bilgi edinin. Ancak geçerli etkinlik, aranabilir etkinlikse
iki şeyden biri gerçekleşir:
- Varsayılan olarak, aranabilir etkinlik
onCreate()
için çağrı içerenACTION_SEARCH
intent, Etkinliğin yeni bir örneği etkinliğin en üstüne yığını. Aranabilir etkinliğinizin artık gösterir. Dolayısıyla, Geri düğmesine dokunduğunuzda bir önceki öğesini kullanmak yerine, aranabilir etkinliğin etkinliği'ne dokunun. android:launchMode
öğesini"singleTop"
olarak ayarlarsanız aranabilir etkinlik,ACTION_SEARCH
niyetini alır şu çağrıyla:onNewIntent(Intent)
, yeniACTION_SEARCH
niyeti iletiliyor. Örneğin, aşağıdaki gibi şu gibi durumu ele alabilirsiniz:"singleTop"
:Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.search) handleIntent(intent) } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) setIntent(intent) handleIntent(intent) } private fun handleIntent(intent: Intent) { if (Intent.ACTION_SEARCH == intent.action) { intent.getStringExtra(SearchManager.QUERY)?.also { query -> doMySearch(query) } } }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); handleIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); handleIntent(intent); } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); doMySearch(query); } }
konu satırındaki örnek kodla karşılaştırıldığında, bir arama yaptığınızda arama amacı artık
handleIntent()
yöntemindedir. Böylece hemonCreate()
veonNewIntent()
bu dosyayı yürütebilir.Sistem
onNewIntent(Intent)
adlı kişiyi çağırdığında etkinlik yeniden başlatıldığı içingetIntent()
yöntemi,onCreate()
ile alınan aynı niyeti döndürür. Bu nedenle,setIntent(Intent)
.onNewIntent(Intent)
: böylece amaçgetIntent()
ileride aranmanız ihtimaline karşı etkinlik güncellenir.
"singleTop"
başlatma modunun kullanıldığı ikinci senaryoda ise
Çünkü arama tamamlandıktan sonra kullanıcı, başka kullanıcılar tarafından
ve uygulamanızın
arama yapılabilir etkinlik. Aranabilir etkinliğinizi şu şekilde ayarlamanızı öneririz:
Aşağıdaki gibi uygulama manifestindeki "singleTop"
başlatma modu
şu örneği inceleyin:
<activity android:name=".SearchableActivity" android:launchMode="singleTop" > <intent-filter> <action android:name="android.intent.action.SEARCH" /> </intent-filter> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable"/> </activity>
Arama bağlamı verilerini iletme
Bazı durumlarda,
toplam 100.000 ABD doları tutarındaydı. Ancak daha hassas bir
kullanıcının bir arama gerçekleştireceği etkinliğe dayalı olarak
sistemin gönderdiği amaç doğrultusunda ek veriler sağlayabilirsiniz.
harika bir fırsat. Ek verileri
APP_DATA
.
Bundle
değeri
dahil edilmiştir.ACTION_SEARCH
Bu tür verileri aranabilir etkinliğinize aktarmak için
Kullanıcının yapabileceği etkinlik için onSearchRequested()
yöntemi
bir arama yapabilir, ek verileri içeren bir Bundle
oluşturabilir ve
telefon etmek
startSearch()
tuşuna basarak arama iletişim kutusunu etkinleştirin. Örnek:
Kotlin
override fun onSearchRequested(): Boolean { val appData = Bundle().apply { putBoolean(JARGON, true) } startSearch(null, false, appData, false) return true }
Java
@Override public boolean onSearchRequested() { Bundle appData = new Bundle(); appData.putBoolean(SearchableActivity.JARGON, true); startSearch(null, false, appData, false); return true; }
"True" (doğru) döndürülmesi, bu geri çağırma etkinliğini başarılı bir şekilde gerçekleştirdiğinizi ve
arama iletişim kutusunu etkinleştirmek için startSearch()
komutunu çağırın. Kullanıcı
bir sorgu gönderdiğinde bu sorgu, verilerle birlikte aranabilir etkinliğinize iletilir.
unutmayın. Ek verileri APP_DATA
Aramayı daraltmak için Bundle
(aşağıdaki örnekte gösterildiği gibi):
Kotlin
val jargon: Boolean = intent.getBundleExtra(SearchManager.APP_DATA)?.getBoolean(JARGON) ?: false
Java
Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA); if (appData != null) { boolean jargon = appData.getBoolean(SearchableActivity.JARGON); }
Arama widget'ını kullanma
![Uygulamanın üst çubuğunda arama görünümünü gösteren resim](https://developer.android.com/static/images/ui/search-ui-topbar-33.png?authuser=19&hl=tr)
Şekil 1. SearchView
Widget'ı:
uygulama çubuğunda bir işlem görünümü.
Arama widget'ı, arama iletişim kutusuyla aynı işlevleri sunar. Google Kullanıcı bir arama yaptığında uygun etkinliği başlatır ve arama önerileri sunabilir ve sesli arama yapabilir. Bu seçenek görünmüyorsa arama widget'ını uygulama çubuğuna yerleştirin, bunun yerine arama widget'ını widget'ını etkinlik düzeninizin bir yerinde görebilirsiniz.
Arama widget'ını yapılandırma
Bu sorunu çözmek için
arama yapılandırması ve
aranabilir etkinlik, destekli aramayı etkinleştirin
numaralı telefonu arayarak her SearchView
için
setSearchableInfo()
ve onun, uygulamanızı temsil eden SearchableInfo
nesnesini
yapılandırma ekleyebilirsiniz.
Şu numarayı arayarak SearchableInfo
için referans alabilirsiniz:
getSearchableInfo()
açık
SearchManager
.
Örneğin, SearchView
sırasında widget'ı etkinleştirin
onCreateOptionsMenu()
geri çağırma işlevini kullanın:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { // Inflate the options menu from XML. val inflater = menuInflater inflater.inflate(R.menu.options_menu, menu) // Get the SearchView and set the searchable configuration. val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager (menu.findItem(R.id.menu_search).actionView as SearchView).apply { // Assumes current activity is the searchable activity. setSearchableInfo(searchManager.getSearchableInfo(componentName)) setIconifiedByDefault(false) // Don't iconify the widget. Expand it by default. } return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the options menu from XML. MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); // Get the SearchView and set the searchable configuration. SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView(); // Assumes current activity is the searchable activity. searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); // Don't iconify the widget. Expand it by default. return true; }
Arama widget'ı yapılandırıldı ve sistem, arama sorgularını sunuyor arama yapabilirsiniz. Ayrıca, Arama widget'ı için arama önerileri.
Uygulama çubuğundaki işlem görünümleri hakkında daha fazla bilgi için İşlem görünümlerini ve işlemleri kullanın sağlayıcılarını ziyaret edin.
Diğer arama widget'ı özellikleri
SearchView
widget'ı, özellikleri kullanmak için
şunları isteyebilir:
- Gönder düğmesi
- Varsayılan olarak, arama sorgusu göndermek için bir düğme yoktur. Bu nedenle kullanıcının
bir arama başlatmak için klavyedeki Return tuşuna basın. Siz
"gönderme" veya düğmesini kullanarak
setSubmitButtonEnabled(true)
- Arama önerileri için sorgu ayrıntılandırma
- Arama önerilerini etkinleştirdiğinizde genellikle kullanıcıların bir seçenek belirlemesini beklersiniz
ancak önerilen arama sorgusunu da daraltmak isteyebilirler.
Öneriyi ekleyen her önerinin yanına bir düğme ekleyebilirsiniz
kullanıcı tarafından ayrıntılandırılmak için arama kutusuna
setQueryRefinementEnabled(true)
- Arama kutusu görünürlüğünü açıp kapatabilme
- Varsayılan olarak, arama widget'ı "simgeleştirilmiş" Yani, işimiz
yalnızca arama simgesiyle (büyüteç) temsil edilir. Genişler
Kullanıcı simgeye dokunduğunda arama kutusu gösterilir. Önceki videoda gösterildiği gibi
Örneğin, telefon araması yaparak varsayılan olarak
setIconifiedByDefault(false)
İstersenizsetIconified()
SearchView
sınıfında, aşağıdakileri yapmanıza olanak tanıyan birkaç API daha vardır:
özelleştirebilirsiniz. Ancak bunların çoğu yalnızca
tüm kullanıcı girişlerini kendiniz halledebilirsiniz. Bunun için
arama sorguları ve arama önerilerini görüntüler.
Hem widget'ı hem de iletişim kutusunu kullanma
Arama widget'ını uygulama çubuğuna
action view ve
alan varsa uygulama çubuğunda görünür.
android:showAsAction="ifRoom"
—Arama widget'ı
işlem görünümü olarak görünmez. Bunun yerine, taşma menüsünde
tıklayın. Örneğin, uygulamanız daha küçük bir ekranda çalıştığında
uygulama çubuğunda, diğer işlemle birlikte arama widget'ını görüntülemek için yeterli alan
öğelerde değişiklik yapabilirsiniz. Böylece menü öğesi,
tıklayın. Taşma menüsüne yerleştirildiğinde, öğe normal bir menü gibi çalışır
öğesi gösterir ve işlem görünümünü (yani arama widget'ını) görüntülemez.
Bu durumu ele almak için arama widget'ını eklediğiniz menü öğesi
kullanıcı, taşma menüsünden seçtiğinde arama iletişim kutusunu etkinleştirmelidir.
Bunun için de
onOptionsItemSelected()
.
"Arama" özelliğini menü öğesini seçin ve şunu aratarak arama iletişim kutusunu açın:
onSearchRequested()
.
Uygulama çubuğundaki öğelerin işleyiş şekli ve nasıl kullanılacağı hakkında daha fazla bilgi için daha fazla bilgi için Uygulama çubuğunu ekleyin.
Sesli arama ekle
Arama iletişim kutunuza veya widget'ınıza sesli arama işlevini eklemek için
android:voiceSearchMode
özelliğini, arama yapılabilir
yapılandırma. Bu işlem, sesli istem başlatan bir sesli arama düğmesi ekler.
Kullanıcı konuşmayı bitirdiğinde, metne dönüştürülen arama sorgusu
arama yapılabilir etkinlik.
Bu, aşağıdaki örnekte gösterilmektedir:
<?xml version="1.0" encoding="utf-8"?> <searchable xmlns:android="http://schemas.android.com/apk/res/android" android:label="@string/search_label" android:hint="@string/search_hint" android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" > </searchable>
Sesi etkinleştirmek için showVoiceSearchButton
değeri gerekir
arayın. İkinci değer olan launchRecognizer
,
sesli arama düğmesi,
metne dönüştürüldü.
Sesli arama davranışını belirtmek için ek özellikler sağlayabilirsiniz. gibi varsayılan dil ve döndürülecek maksimum sonuç sayısı gibi ayarları ifade eder. Görüntüleyin Daha fazla bilgi için Arama yapılandırması referansı mevcut özellikler hakkında bilgi edinin.
ziyaret edin.Arama önerileri ekleyin
Hem arama iletişim kutusu hem de arama widget'ı arama önerileri sağlayabilir yardımcı olur. Sistem, Kullanıcı bir öneri seçtiğinde etkinliği işler ve öneririz.
İki tür arama önerisi sunabilirsiniz:
- Son sorgu arama önerileri
- Bu öneriler, kullanıcının daha önce arama olarak kullandığı kelimelerdir daha fazla bilgi edineceksiniz. Bkz. Ekleme özel arama önerileri görüntüleyin.
- Özel arama önerileri
- Bunlar, kendi veri kaynağınızdan kullanıcılara sağladığınız arama önerileridir kullanıcıların aradıkları yazımı veya öğeyi hemen seçmelerine yardımcı olma . Bkz. Özel arama ekleme önerileri inceleyin.