попробуйте код ниже.
Я использую AutoCompleteText для автоматического завершения местоположения, в котором находится пользователь, locationList - это не что иное, как массив, который я написал в файле strings.xml, поэтому используйте свой собственный массив строк здесь.
locationList = res.getStringArray(R.array.ticketLocation);
ArrayAdapter<String> locationAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, locationList);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.txtCountries);
textView.setThreshold(1);
textView.setAdapter(locationAdapter);
textView.setValidator(new Validator());
textView.setOnFocusChangeListener(new FocusListener());
textView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TextView ticketLocation = (TextView) view;
getTicketLocation = ticketLocation.getText().toString();
}
});
и ниже код для подтверждения ввода текста в поле местоположения, fixText() метод предотвращения пользователя от ввода текста, который не существует в строке массива, например: если тип пользователя " Германия», которая не существует в списке массива строки, он будет заменен на„“, который является пустая строка внутри поля ввода EditText
class Validator implements AutoCompleteTextView.Validator {
@Override
public boolean isValid(CharSequence text) {
// Log.v("Test", "Checking if valid: " + text);
Arrays.sort(locationList);
if (Arrays.binarySearch(locationList, text.toString()) > 0) {
return true;
}
return false;
}
@Override
public CharSequence fixText(CharSequence invalidText) {
// Log.v("Test", "Returning fixed text");
/*
* I'm just returning an empty string here, so the field will be
* blanked, but you could put any kind of action here, like popping
* up a dialog?
*
* Whatever value you return here must be in the list of valid
* words.
*/
return "";
}
}
class FocusListener implements View.OnFocusChangeListener {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// Log.v("Test", "Focus changed");
if (v.getId() == R.id.txtCountries && !hasFocus) {
// Log.v("Test", "Performing validation");
((AutoCompleteTextView) v).performValidation();
}
}
}
@Andreyua попробуйте это https://matalamaki.fi/2015/09/07/android-autocompletetextview-with-drop-down-always-visible-or-how-to-figure-your-way-with-internal- андроид-APIs /. Другой способ - вызвать 'autoTextView.showDropDown();' in 'onTouchEvent (событие MotionEvent)', однако это не прекрасный эффект :) – BNK
вы можете сохранить переменную для отслеживания, если выпадающее меню видно или нет, и реализовать onTouchEvent в вашей деятельности , Если выпадающее меню видно, тогда верните true и не вызывайте super else call super. Может быть, это сработает, но это не очень хорошее решение –