在我看来,必须有一个“容易”的方式来做到这一点比黑客进入EditTextPreference类,并与视图搞乱。这是我的解决方案,因为AutoCompleteTextView扩展了EditText,我只需要重写直接调用其常量EditText对象的EditTextPreference方法。
public class AutoCompletePreference extends EditTextPreference {
private static AutoCompleteTextView mEditText = null;
public AutoCompletePreference(Context context, AttributeSet attrs) {
super(context, attrs);
mEditText = new AutoCompleteTextView(context, attrs);
mEditText.setThreshold(0);
//The adapter of your choice
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_dropdown_item_1line, COUNTRIES);
mEditText.setAdapter(adapter);
}
private static final String[] COUNTRIES = new String[] {
"Belgium", "France", "Italy", "Germany", "Spain"
};
@Override
protected void onBindDialogView(View view) {
AutoCompleteTextView editText = mEditText;
editText.setText(getText());
ViewParent oldParent = editText.getParent();
if (oldParent != view) {
if (oldParent != null) {
((ViewGroup) oldParent).removeView(editText);
}
onAddEditTextToDialogView(view, editText);
}
}
@Override
protected void onDialogClosed(boolean positiveResult) {
if (positiveResult) {
String value = mEditText.getText().toString();
if (callChangeListener(value)) {
setText(value);
}
}
}
}
感谢Brady连接到源代码。
差不多!我得到我的自动完成框出现,但自动完成下拉框被切断,并显示在输入字段上方,而下拉列表的下半部分未显示。 – 2011-08-09 22:14:28
其实,我可以通过硬编码下拉框高度的值来修复以前评论中的错误。 – 2011-08-10 07:43:14