我使用AutoCompleteTextView
,當用戶點擊它時,即使它沒有文字,我也想顯示建議 - 但setThreshold(0)
與setThreshold(1)
完全相同 - 所以用戶必須輸入至少1個字符來顯示建議。Android:AutoCompleteTextView在沒有文字輸入時顯示建議
回答
這是documented behavior:「當閾值小於或等於0時,應用閾值1。」。
您可以通過showDropDown()
手動顯示下拉列表,因此也許您可以安排在需要時顯示它。或者,子類AutoCompleteTextView
並覆蓋enoughToFilter()
,始終返回true
。
這是我的課 - 我稱之爲InstantAutoComplete。它介於AutoCompleteTextView和Spinner之間。
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.AutoCompleteTextView;
public class InstantAutoComplete extends AutoCompleteTextView {
public InstantAutoComplete(Context context) {
super(context);
}
public InstantAutoComplete(Context arg0, AttributeSet arg1) {
super(arg0, arg1);
}
public InstantAutoComplete(Context arg0, AttributeSet arg1, int arg2) {
super(arg0, arg1, arg2);
}
@Override
public boolean enoughToFilter() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused && getAdapter() != null) {
performFiltering(getText(), 0);
}
}
}
用它在你的XML是這樣的:
<your.namespace.InstantAutoComplete ... />
太棒了!我還想指出,在佈局XML文件中,您必須將'
偉大的類 - 只有在onFocusChanged方法中,將「if(focused)」更改爲「if(focused && getAdapter()!= null)」。 – 2013-12-14 23:58:36
@JulesColle謝謝,編輯 – 2014-12-26 14:38:00
爲了使CustomAutoCompleteTextView。 1.覆蓋setThreshold,enoughToFilter,onFocusChanged方法
public class CustomAutoCompleteTextView extends AutoCompleteTextView {
private int myThreshold;
public CustomAutoCompleteTextView (Context context) {
super(context);
}
public CustomAutoCompleteTextView (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomAutoCompleteTextView (Context context, AttributeSet attrs) {
super(context, attrs);
}
//set threshold 0.
public void setThreshold(int threshold) {
if (threshold < 0) {
threshold = 0;
}
myThreshold = threshold;
}
//if threshold is 0 than return true
public boolean enoughToFilter() {
return true;
}
//invoke on focus
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
//skip space and backspace
super.performFiltering("", 67);
// TODO Auto-generated method stub
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
protected void performFiltering(CharSequence text, int keyCode) {
// TODO Auto-generated method stub
super.performFiltering(text, keyCode);
}
public int getThreshold() {
return myThreshold;
}
}
Destil的代碼工作好了的時候,只有一個InstantAutoComplete
對象。 它沒有與兩個雖然工作 - 不知道爲什麼。但是,當我把showDropDown()
(就像CommonsWare決定)爲onFocusChanged()
這樣的:
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) {
performFiltering(getText(), 0);
showDropDown();
}
}
它解決了這個問題。
這只是兩個答案正確結合,但我希望它可以節省一些人一些時間。
您的補充幫助,但如果InstantAutoComplete中有文本並且屏幕方向已更改,則會出現錯誤。我使用窗口可見性檢查來修復它,我在這裏發佈了新代碼:https://gist.github.com/furycomptuers/4961368 – FuryComputers 2013-02-15 16:25:00
您可以使用onFocusChangeListener;
TCKimlikNo.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
TCKimlikNo.showDropDown();
}
}
});
最簡單的方法:
只需使用setOnTouchListener和showDropDown()
AutoCompleteTextView text;
.....
.....
text.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event){
text.showDropDown();
return false;
}
});
爲了使這更好用,如果(!text.isPopupShowing()){ text .showDropDown(); } – 2014-12-15 12:57:34
並不常見,但如果用戶沒有觸摸這個EditText,這將不起作用。例如,當使用帶按鈕的遙控器(例如Android TV)時。 – 2014-12-31 00:27:51
你應該使用setOnFocusChanged。有人可以有鍵盤和按Tab鍵或使用鼠標和觸摸監聽器不會被調用。 – barwnikk 2015-08-29 04:00:05
Destil的回答幾乎之上的作品,但是有一個微妙的錯誤。當用戶第一次將焦點放在該字段時,它會起作用,但是如果他們離開並返回到字段,它將不會顯示下拉列表,因爲mPopupCanBeUpdated的值在隱藏時仍然是錯誤的。修復方法是將onFocusChanged方法更改爲:
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) {
if (getText().toString().length() == 0) {
// We want to trigger the drop down, replace the text.
setText("");
}
}
}
,但這也意味着文本將被重置(雖然通常情況下通常很好)。 – 2014-12-31 00:29:36
適配器最初不執行過濾。
未執行過濾時,下拉列表爲空。
因此您可能必須先進行過濾。
要做到這一點,你可以調用filter()
添加完條目後:
adapter.add("a1");
adapter.add("a2");
adapter.add("a3");
adapter.getFilter().filter(null);
嘗試
searchAutoComplete.setThreshold(0);
searchAutoComplete.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {//cut last probel
if (charSequence.length() > 1) {
if (charSequence.charAt(charSequence.length() - 1) == ' ') {
searchAutoComplete.setText(charSequence.subSequence(0, charSequence.length() - 1));
searchAutoComplete.setSelection(charSequence.length() - 1);
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
//when clicked in autocomplete text view
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.header_search_etv:
if (searchAutoComplete.getText().toString().length() == 0) {
searchAutoComplete.setText(" ");
}
break;
}
}):
只需撥打觸摸此方法,或者點擊autoCompleteTextView或者事件你要。
autoCompleteTextView.showDropDown()
這個工作對我來說,僞代碼:
public class CustomAutoCompleteTextView extends AutoCompleteTextView {
public CustomAutoCompleteTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean enoughToFilter() {
return true;
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) {
performFiltering(getText(), 0);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
this.showDropDown();
return super.onTouchEvent(event);
}
}
只需粘貼到您的onCreate方法在Java中
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(
this, android.R.layout.simple_spinner_dropdown_item,
getResources().getStringArray(R.array.Loc_names));
textView1 =(AutoCompleteTextView) findViewById(R.id.acT1);
textView1.setAdapter(arrayAdapter);
textView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View arg0) {
textView1.setMaxLines(5);
textView1.showDropDown();
}
});
這將XML文件...
<AutoCompleteTextView
android:layout_width="200dp"
android:layout_height="30dp"
android:hint="@string/select_location"
android:id="@+id/acT1"
android:textAlignment="center"/>
,打造下價值觀string.xml數組...
<string-array name="Loc_names">
<item>Pakistan</item>
<item>Germany</item>
<item>Russia/NCR</item>
<item>China</item>
<item>India</item>
<item>Sweden</item>
<item>Australia</item>
</string-array>
,你是好去。
七年後,夥計們,問題保持不變。這裏有一個功能,強制這個愚蠢的彈出窗口在任何情況下顯示自己。您只需將適配器設置爲AutoCompleteTextView,向其中添加一些數據,然後隨時調用函數即可。
致信@DavidVávra。它基於他的代碼。
import android.content.Context
import android.util.AttributeSet
import android.widget.AutoCompleteTextView
class InstantAutoCompleteTextView : AutoCompleteTextView {
constructor(context: Context) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
override fun enoughToFilter(): Boolean {
return true
}
fun showDropdownNow() {
if (adapter != null) {
// Remember a current text
val savedText = text
// Set empty text and perform filtering. As the result we restore all items inside of
// a filter's internal item collection.
setText(null, true)
// Set back the saved text and DO NOT perform filtering. As the result of these steps
// we have a text shown in UI, and what is more important we have items not filtered
setText(savedText, false)
// Move cursor to the end of a text
setSelection(text.length)
// Now we can show a dropdown with full list of options not filtered by displayed text
performFiltering(null, 0)
}
}
}
- 1. Android:autocompletetextview,建議列表顯示在textview上方?
- 2. AutocompleteTextView在顯示鍵盤時沒有顯示完整的建議?
- 3. 文/輸入沒有顯示在DIV了
- 4. 在文本字段中輸入時顯示預製建議的列表
- 5. 建議沒有顯示在AutoCompleteTextView
- 6. 在輸入字段中輸入字符時自動建議?
- 7. 顯示搜索在橫向模式下輸入時的建議
- 8. Android SearchRecentSuggestions - 在輸入時不會顯示建議SearchView
- 9. 沒有顯示輸入值
- 10. 文字輸入沒有顯示在iOS模擬器
- 11. 多提示輸入建議
- 12. CSS和表單輸入:文本沒有顯示輸入文本
- 13. FLEX:有文字建議的小部件(文字輸入)?
- 14. 輸入文字時顯示DIV
- 15. 如何顯示在edittext中輸入文字的可能匹配建議?
- 16. HTML表單文字輸入建議框
- 17. 顯示新文字輸入
- 18. 在輸入文字時得到Google搜索建議
- 19. Angular JS在用戶突出顯示輸入字段並且沒有輸入任何東西時顯示錯誤
- 20. Ipad設備上沒有顯示輸入文本字段(Safari)
- 21. 顯示沒有文字輸入的eonasdan.github datetimepicker
- 22. 當我輸入字母時,自動填充不會顯示建議
- 23. 輸入文字而不顯示文字
- 24. 寫輸出到文本文件沒有顯示輸入
- 25. 禁用文本框輸入歷史以顯示關鍵字建議
- 26. [vaadin 6] [Combobox]不顯示Suggestionbox時沒有任何建議
- 27. Android中的PlaceAutoCompleteFragment在輸入第一個字母后沒有顯示建議並關閉
- 28. Webview文本輸入具有焦點,但沒有輸入文本顯示
- 29. Netbeans IDE - 在輸入時自動建議
- 30. UISearchDisplayController - 當沒有文字輸入而不是疊加時顯示錶格
我正在做類似的事情! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42 2012-10-30 19:48:25