2010-08-31 15 views
16

J'utilise actuellement un champ de saisie semi-automatique à l'aide du composant AutocompleteTextView.AutocompleteTextview et CompletionHintView

J'essaie d'ajouter un indice d'achèvement avec le nombre de résultats, et je veux juste le styliser différemment de l'élément de la liste déroulante. Il y a un attribut nommé completionHintView sur le composant, mais chaque fois que je lui donne une mise en page que j'ai précédemment définie, il lance un NullPointerException.

Est-ce que quelqu'un a un exemple de travail sur la façon de styliser l'indice de complétion?

+0

Semble que personne n'a un exemple :) Vous voulez montrer du code afin que nous puissions peut-être y travailler et voir ce qui ne va pas? –

Répondre

5

Pouvez-vous élaborer sur le type de style que vous cherchez à appliquer? S'il s'agit d'un style de texte de base, vous pouvez probablement créer un Spannable et définir l'indicateur d'achèvement avec le résultat, puisqu'il accepte un CharSequence. Un exemple de construction d'un Spannable et de l'application de styles est illustré dans this post.

Si vous êtes à la recherche d'un moyen de manipuler réellement les paramètres du TextView (par exemple un rembourrage), la source code de AutoCompleteTextView semble fournir une indication (jeu de mots).

private View getHintView(Context context) { 
    if (mHintText != null && mHintText.length() > 0) { 
     final TextView hintView = (TextView) LayoutInflater.from(context).inflate(
       mHintResource, null).findViewById(com.android.internal.R.id.text1); 
     hintView.setText(mHintText); 
     hintView.setId(HINT_VIEW_ID); 
     return hintView; 
    } else { 
     return null; 
    } 
} 

Cela révèle que Android recherche l'identifiant text1 dans la référence de ressource que vous spécifiez. La version la plus fondamentale d'une telle ressource contiendrait rien, mais un TextView avec cet ID:

<?xml version="1.0" encoding="utf-8"?> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@android:id/text1" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:padding="10dp" 
     android:textColor="#FF0000" android:textSize="16sp" /> 

Enregistrer ci-dessus dans un fichier de mise en page (par exemple completion_hint_view.xml) et la référence comme suit à partir de votre AutoCompleteTextView:

<AutoCompleteTextView android:id="@+id/autocomplete_textview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:completionHintView="@layout/completion_hint_view"/> 

Cette deuxième option est probablement la plus facile à utiliser et vous donnera un accès complet aux paramètres de TextView. Si vous devez appliquer plusieurs styles au texte de cette vue, vous pouvez incorporer la première suggestion, car cela vous donnera plus de flexibilité.

Si aucune de ces suggestions ne suffit, je peux penser à des solutions moins élégantes qui vous permettraient probablement d'obtenir le même résultat.