Как что-то сделать после того, как пользователь нажмет на мой EditText
-
22-09-2019 - |
Вопрос
у меня есть EditText
это показывает время.После того, как пользователь нажмет кнопку EditText
Я хочу показать TimePickerDialog
, поэтому я установил View.OnClickListener
моему EditText
.
Но OnClickListener
ведет себя странно - я трогаю EditText
а потом появляется программная клавиатура (которая мне не нужна).Когда я прикасаюсь снова, OnClickListener.onClick()
наконец вызывается и появляется диалоговое окно.
Что делать, если я хочу, чтобы диалог появился немедленно?
Решение
В отличие от большинства других элементов управления, EditText
s можно фокусировать, пока система находится в «сенсорном режиме».Первое событие щелчка фокусирует элемент управления, а второе событие фактически запускает элемент управления. OnClickListener
.Если вы отключите фокусировку в сенсорном режиме с помощью android:focusableInTouchMode
Атрибут просмотра, OnClickListener
должен выстрелить, как ожидалось.
<EditText
android:text="@+id/EditText01"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:focusableInTouchMode="false" />
Другие советы
Другим решением является использование ontouchlistener
:
edittext.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(MotionEvent.ACTION_UP == event.getAction()) {
mQuaternion_1.setText("" + mQ1);
}
return true; // return is important...
}
});
Если он вернется true
событие обрабатывается, и клавиатура не появляется.Если вы хотите, чтобы клавиатура по-прежнему всплывала и регистрировала щелчок, она должна вернуться. false
.
Похоже, вы не хотите, чтобы пользователь действительно мог вводить EditText.Вы просто хотите, чтобы они могли выбирать время с помощью средства выбора времени.Так почему бы не просто кнопку, вызывающую TimePickerDialog?Вы можете отобразить время, выбранное в TextView.
Или вы можете просто заменить представление EditText на Таймпикер представление (не диалоговое окно, просто обычное представление).
Я решил это, используя настраиваемую кнопку следующим образом:
<Button
android:id="@+id/btTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="test"
android:textSize="20dp"
android:background="@android:drawable/edit_text" />
Вместо сенсорного прослушивателя используйте прослушиватель изменения текста:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//yourFunction();
}
@Override
public void afterTextChanged(Editable s) {
}
});
Если я правильно понимаю, вам просто нужно что-то вроде
<EditText android:text="@+id/EditText01" android:id="@+id/EditText01"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:clickable="true" android:inputType="none" />
не редактируемый и кликабельный.Установить OnClickListener
и вы сделали.По идее, на практике тоже следует добавить
android:editable="false"
который устарел, но делает свое дело.