Android 8.0 aggiunge funzionalità di ricerca estese per il menu Impostazioni. Questo documento descrive come aggiungere un'impostazione e assicurarsi che sia indicizzata correttamente per Ricerca nelle impostazioni.
Crea impostazioni Indicizzabili
Ogni frammento Impostazioni che deve essere indicizzato implementa la funzione
Indexable
e richiede l'architettura
campo:
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER
Dopo aver configurato il frammento per l'indicizzazione, aggiungilo a
SearchIndexableResources
trovato in:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java
Metodi facoltativi
Questa SearchIndexProvider
interfaccia ha quattro facoltativi
di machine learning.
getXmlResourcesToIndex
- Sostituisci questa opzione se i contenuti dei frammenti provengono da:
preference xml
- Restituisce una preferenza XML come elenco da indicizzare.
Esempio di risorse XML:
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
- Sostituisci questa opzione se i contenuti dei frammenti NON provengono da:
preference xml
- Restituisce un elenco di dati non elaborati (
SearchIndexableRaw
) da indicizzare.
Esempio di dati non elaborati:
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
- Se il frammento è un
DashboardFragment
, raramente sono necessari sostituirlo. - Restituisce un elenco di chiavi che corrisponde ai risultati che non devono essere visualizzati
per l'utente, il dispositivo, la configurazione e così via specificati.Le chiavi qui fornite devono
corrisponde al campo KEY in
SearchIndexableResource
eSearchIndexableRaw
. - Ad esempio, l'utilizzo dei dati non deve essere mostrato agli utenti che non hanno mai ricevuto un Una scheda SIM nel dispositivo.
Esempio di chiavi non indicizzabili:
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; }
getPreferenceController
Restituisce un elenco di controller di preferenze associati al frammento. Questo elenco viene utilizzato per generare risultati in linea, aggiornare gli elementi non indicizzabili e così via.
Di conseguenza, tutto ciò che vuoi mostrare nella ricerca deve essere incluso in
getXmlResourcesToIndex
o getRawDataToIndex
.
Aggiungi parole chiave per le impostazioni
Per fare in modo che un'impostazione sia facilmente disponibile per la ricerca, aggiungi parole chiave pertinenti al impostazione che un utente può utilizzare per cercarla.
Aspetti da considerare quando si aggiungono parole chiave:
- Le parole chiave sono un elenco di parole che l'utente non vede necessariamente ma che possono far parte del loro modello mentale di come funziona l'ambientazione.
- Si tratta di parole che l'utente potrebbe digitare per accedere alle tue impostazioni.
- Possono essere sinonimi o qualsiasi parola associata all'impostazione.
- Ad esempio, "disattiva" per trovare l'impostazione Volume.
Evita i duplicati
Se stai eliminando incondizionatamente una pagina di impostazioni, rimuovi l'indicizzazione di la pagina originale per evitare la duplicazione dei risultati.
- Trova il
PreferenceFragment
della pagina che stai eliminando. - Rimuovi
SearchIndexProvider
.
Convalida
Per testare la ricercabilità di una nuova impostazione:
- Installa una versione recente di O sul dispositivo.
- Reindicizza il database selezionando: Impostazioni > App e Notifiche > Informazioni sulle app > Impostazioni > Spazio di archiviazione > Cancella dati
- Verifica che le impostazioni di destinazione vengano visualizzate nella ricerca.
La ricerca del prefisso del titolo di un'impostazione corrisponderà a questo.
Questi test robolectrici possono essere eseguiti per convalidare l'implementazione di
funzionalità:
packages/apps/Settings/tests/robotests/src/com/android/settings/search
Il target della build è: RunSettingsRoboTests