2010-11-20 13 views

Odpowiedz

9

Rozszerz AutoCompleteTextView, przesłanianie enoughToFilter() metody i sposoby progowe tak, że nie zastępuje próg 0 z 1 progiem:

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

Nie spowoduje to natychmiastowego rozwinięcia listy rozwijanej, ale musisz zacząć pisać. – Heinrisch

1

Połóż adapter z jednym/dwoma białymi znakami po lewej stronie w zależności od ustawienia progu.

9

Mają wygląd setThreshold metody:

public void setThreshold (int próg)
Od: poziom API 1
Określa minimalną liczbę znaków użytkownik musi wpisać w polu edycji przed wyświetleniem listy rozwijanej .
Gdy próg jest mniejszy lub równy 0, stosowany jest próg 1.

+1

Czy jest mimo to do zrobienia 0? – Mitchell

+0

Gdy próg jest mniejszy lub równy 0, stosowany jest próg 1. – systempuntoout

+1

Więc nie ma sposobu, aby tak się stało, że po prostu wybór ujawnia wszystkie opcje? – Mitchell

21

Aby uzyskać autouzupełniania, aby pokazać na fokus dodać ostrości słuchacza i pokazać spadek w dół, gdy pole dostaje skupić, tak:

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

Albo po prostu zadzwoń editText.showDropDown(), jeśli nie potrzebujemy część ostrości.

+1

Ten działał najlepiej dla mnie. Chciałem, żeby się pojawił, gdy użytkownik kliknie, więc zamiast Fokusa użyłem go. –

+0

proste zwięzłe i ... najlepsze! –

0

Alternatywna metoda zmieniając ustawienia w swojej XML: Jak wspomniano przez innych trzeba ustawić swoją „Auto Completion Threshold” do 1

Inne niż to, co @systempuntoout wymienione.

Można również zrobić to w pliku XML, jak pokazano

<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" 
/> 

Uwaga linia: android: completionThreshold = "1"

1

Dla ludzi, którzy chcą zmienić próg użyciu SearchView masz do użycia:

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