Android 8.0, Ayarlar menüsü için genişletilmiş arama özellikleri ekler. Bu belgede bir ayarın nasıl ekleneceği ve bunun Ayarlar araması için uygun şekilde dizine eklenmesinin nasıl sağlanacağı açıklanmaktadır.
Dizinlenebilir ayarlar oluşturma
Dizine eklenmesi gereken her Ayarlar parçası, Indexable
arayüzü uygular VE statik alanı gerektirir:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Parçanızı indeksleme için ayarladıktan sonra, onu şurada bulunan SearchIndexableResources
ekleyin:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
İsteğe bağlı yöntemler
Bu SearchIndexProvider
arayüzünün dört isteğe bağlı yöntemi vardır.
getXmlResourcesToIndex
- Parça içeriğiniz şu kaynaktan geliyorsa bunu geçersiz kılın:
preference xml
- Dizine eklenecek bir liste olarak bir XML tercihini döndürür.
XML kaynakları örneği:
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) { ArrayList<SearchIndexableResource> result = new ArrayList<SearchIndexableResource>(); SearchIndexableResource sir = new SearchIndexableResource(context); sir.xmlResId = R.xml.display_settings; result.add(sir); return result; }
getRawDataToIndex
- Parça içeriğiniz şu kaynaktan DEĞİLSE bunu geçersiz kılın:
preference xml
- Dizine eklenecek Ham verilerin (
SearchIndexableRaw
) listesini döndürür.
Ham veri örneği:
public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { final List<SearchIndexableRaw> result = new ArrayList<>(); final Resources res = context.getResources(); // Add fragment title SearchIndexableRaw data = new SearchIndexableRaw(context); data.title = res.getString(R.string.wifi_settings); data.screenTitle = res.getString(R.string.wifi_settings); data.keywords = res.getString(R.string.keywords_wifi); data.key = DATA_KEY_REFERENCE; result.add(data); return result; }
getNonIndexableKeys
- Parçanız bir
DashboardFragment
ise, bunu nadiren geçersiz kılmanız gerekir. - Belirli bir kullanıcı, cihaz, yapılandırma vb. için gösterilmemesi gereken sonuçlara karşılık gelen anahtarların listesini döndürür. Burada sağlanan anahtarlar,
SearchIndexableResource
veSearchIndexableRaw
içindeki KEY alanıyla eşleşmelidir. - Örneğin: Veri Kullanımı, cihazlarında hiç SIM kartı olmayan kullanıcılara görünmemelidir.
Dizine alınamayan anahtarlar örneği:
public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!checkIntentAction(context, "android.settings.TERMS")) { keys.add(KEY_TERMS); } if (!checkIntentAction(context, "android.settings.LICENSE")) { keys.add(KEY_LICENSE); } if (!checkIntentAction(context, "android.settings.COPYRIGHT")) { keys.add(KEY_COPYRIGHT); } if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) { keys.add(KEY_WEBVIEW_LICENSE); } return keys; }
getPreferenceControllers
Bu parçayla ilişkili tercih denetleyicilerinin listesini döndürür. Bu liste, satır içi sonuçları oluşturmak, indekslenemeyenleri güncellemek vb. için kullanılır.
Bu nedenle, aramada görünmesini istediğiniz her şeyin getXmlResourcesToIndex
veya getRawDataToIndex
dahil edilmesi gerekir.
Ayarlarınız için anahtar kelimeler ekleme
Bir ayarın kolayca aranabilmesini sağlamak için kullanıcının ayarı aramak için kullanabileceği, ayarla alakalı anahtar sözcükler ekleyin.
Anahtar kelime eklerken dikkat edilmesi gerekenler:
- Anahtar kelimeler, kullanıcının mutlaka görmediği ancak ortamın nasıl çalıştığına ilişkin zihinsel modelinin parçası olabilecek kelimelerin bir listesidir.
- Bunlar, kullanıcının ayarınıza ulaşmak için yazabileceği kelimelerdir.
- Bunlar eşanlamlı olabilir veya ayarla ilişkili herhangi bir kelime kullanılabilir.
- Örneğin, Ses ayarını bulmak için "sessiz" kullanılabilir.
Çoğaltmayı önlemek
Bir ayarlar sayfasını koşulsuz olarak gizliyorsanız, sonuçların tekrarlanmasını önlemek için orijinal sayfanın indekslenmesini kaldırın.
- Bastırdığınız sayfanın
PreferenceFragment
bulun. -
SearchIndexProvider
kaldırın.
Doğrulama
Yeni bir ayarın aranabilirliğini test etmek için:
- Cihaza O'nun yeni bir sürümünü yükleyin.
- Aşağıdakileri seçerek veritabanını yeniden dizinleyin: Ayarlar > Uygulamalar ve Bildirimler > Uygulama bilgileri > Ayarlar > Depolama > Verileri Temizle
- Hedef ayarların aramada göründüğünü doğrulayın.
Bir ayarın başlığının önekini aramak, onunla eşleşecektir.
Bu roboelektrik testler, bu özelliğin uygulanmasını doğrulamak için çalıştırılabilir:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Derleme hedefi şudur: RunSettingsRoboTests