Обычно требуется максимальная совместимость с нормальным поведением EditText
.
Таким образом, вы должны не использовать android:focusable="false"
, поскольку да, вид больше не будет фокусироваться, что выглядит плохо. Например, фон для рисования больше не будет показывать свое нажатое состояние.
Вместо этого вам следует сделать следующее:
myEditText.setInputType(InputType.TYPE_NULL);
myEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// showMyDialog();
}
});
myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
// showMyDialog();
}
}
});
Устанавливая тип ввода на TYPE_NULL
, вы предотвращаете появление программной клавиатуры.
Установив OnClickListener
и OnFocusChangeListener
, вы убедитесь, что ваше диалоговое окно всегда будет открываться, когда пользователь щелкает поле EditText
, как при получении фокуса (первый щелчок), так и при последующих щелчках.
Просто установить android:inputType="none"
или setInputType(InputType.TYPE_NULL)
не всегда достаточно. Для некоторых устройств вы также должны установить android:editable="false"
в XML, хотя это не рекомендуется. Если он больше не работает, он будет просто проигнорирован (как и все атрибуты XML, которые не поддерживаются).