Arama arayüzü oluşturma

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 standart EditText. 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.
ziyaret edin.

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:

  1. Şuradaki ACTION_SEARCH amacını kabul etmek için etkinliği beyan edin: <intent-filter> öğesine dokunun.
  2. 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ü:

  1. Sorguyu alın.
  2. Verilerinizde arama yapın.
  3. Sonuçları sunun.

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 ve SQLiteDatabase 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 ve ProgressBar başlıklı bölüme bakın.
ziyaret edin.

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çeren ACTION_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), yeni ACTION_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 hem onCreate() ve onNewIntent() bu dosyayı yürütebilir.

    Sistem onNewIntent(Intent) adlı kişiyi çağırdığında etkinlik yeniden başlatıldığı için getIntent() 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

Şekil 1. SearchViewWidget'ı: 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) İsterseniz setIconified()

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.