2010-11-20 21 views

Répondre

9

Prolonger la AutoCompleteTextView, remplaçant les méthodes et les méthodes de seuil enoughToFilter() afin qu'il ne remplace pas le 0 seuil avec un 1 seuil:

public class MyAutoCompleteTextView extends AutoCompleteTextView { 

    private int myThreshold; 

    public MyAutoCompleteTextView(Context context) { 
     super(context); 
    } 

    public MyAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public MyAutoCompleteTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public void setThreshold(int threshold) { 
     if (threshold < 0) { 
      threshold = 0; 
     } 
     myThreshold = threshold; 
    } 

    @Override 
    public boolean enoughToFilter() { 
     return getText().length() >= myThreshold; 
    } 

    @Override 
    public int getThreshold() { 
     return myThreshold; 
    } 

} 
+1

Cela ne montrera pas la liste déroulante à la fois, vous devrez toujours commencer à taper. – Heinrisch

1

Pad adaptateur avec un/deux caractères blancs sur la gauche en fonction du réglage de seuil.

9

allez voir setThreshold méthode:

public void setThreshold (int seuil)
depuis: API Niveau 1
Indique le nombre minimum de caractères que l'utilisateur doit saisir dans la zone d'édition avant que la liste déroulante soit affichée .
Lorsque le seuil est inférieur ou égal à 0, un seuil de 1 est appliqué.

+1

Y a-t-il un moyen d'y arriver? – Mitchell

+0

Lorsque le seuil est inférieur ou égal à 0, un seuil de 1 est appliqué. – systempuntoout

+1

Donc, il n'y a aucun moyen de faire en sorte que le simple choix révèle toutes les options? – Mitchell

21

Pour obtenir la saisie semi-automatique pour montrer sur le focus Ajout d'un écouteur de mise au point et montrer le menu déroulant lorsque le champ se concentrer, comme ceci:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View view, boolean hasFocus) { 
    if(hasFocus){ 
     editText.showDropDown(); 
    } 
    } 
}); 

Ou appelez editText.showDropDown() si vous n'avez pas besoin de la part de mise au point.

+1

Celui-ci fonctionnait le mieux pour moi. Je voulais qu'il apparaisse lorsque l'utilisateur clique dessus, donc au lieu de Focus j'ai utilisé onClick. –

+0

simple concis et ... le meilleur! –

0

Méthode alternative de modifier le paramètre dans votre XML: Comme mentionné par d'autres, vous devez définir votre « Auto Completion Threshold » à 1

autre que ce @systempuntoout mentionné.

Vous pouvez aussi le faire dans votre fichier XML comme indiqué

<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/edittext_id" 
    android:inputType="textAutoComplete" 
    android:completionThreshold="1" 
/> 

Notez la ligne: android: completionThreshold = "1"

1

Pour les personnes qui veulent changer le seuil en utilisant SearchView vous avez à utiliser:

SearchView.SearchAutoComplete complete = (SearchView.SearchAutoComplete)search.findViewById(R.id.search_src_text); 
complete.setThreshold(0);