2010-11-20 34 views

Trả lời

9

Mở rộng AutoCompleteTextView, trọng các enoughToFilter() phương pháp và các phương pháp ngưỡng để nó không thay thế ngưỡng 0 với 1 ngưỡng:

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

Thao tác này sẽ không hiển thị menu thả xuống cùng một lúc, bạn vẫn sẽ cần phải bắt đầu nhập. – Heinrisch

1

Pad bộ đổi nguồn của bạn bằng một/hai ký tự trắng ở bên trái tùy thuộc vào cài đặt ngưỡng.

9

Có một cái nhìn để setThreshold phương pháp:

public void setThreshold (int ngưỡng)
Từ: API Level 1
Chỉ định số lượng tối thiểu của ký tự người dùng phải gõ trong hộp chỉnh sửa trước khi danh sách thả xuống được hiển thị .
Khi ngưỡng nhỏ hơn hoặc bằng 0, ngưỡng 1 được áp dụng.

+1

Có cách nào để thực hiện cho nó 0 không? – Mitchell

+0

Khi ngưỡng nhỏ hơn hoặc bằng 0, ngưỡng 1 được áp dụng. – systempuntoout

+1

Vì vậy, không có cách nào để làm cho nó để chỉ lựa chọn tiết lộ tất cả các tùy chọn? – Mitchell

21

Để có được autocomplete để hiển thị trên tập trung thêm trình nghe tập trung và hiển thị menu thả xuống khi trường được lấy nét, như sau:

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

Hoặc chỉ cần gọi editText.showDropDown() nếu bạn không cần phần lấy nét.

+1

Điều này phù hợp nhất với tôi. Tôi muốn nó hiển thị khi người dùng nhấp vào nó để thay vì Focus tôi sử dụng onClick. –

+0

đơn giản súc tích và ... tốt nhất! –

0

phương pháp thay thế của việc thay đổi các thiết lập trong XML của bạn: Như đã đề cập bởi những người khác bạn cần phải thiết lập của bạn 'Auto Completion Threshold' tới 1

khác so với những gì @systempuntoout đề cập.

Bạn cũng có thể làm điều đó trong tập tin XML của bạn như

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

Lưu ý dòng: android: completionThreshold = "1"

1

Đối với những người muốn thay đổi ngưỡng sử dụng SearchView bạn có để sử dụng:

SearchView.SearchAutoComplete complete = (SearchView.SearchAutoComplete)search.findViewById(R.id.search_src_text); 
complete.setThreshold(0); 
Các vấn đề liên quan