Подтвердить что ты не робот

Как сделать что-то после того, как пользователь нажмет на меня EditText

У меня есть EditText, который показывает время. После того, как пользователь нажимает кнопку EditText, я хочу показать TimePickerDialog, поэтому я установил View.OnClickListener в мой EditText.

Но OnClickListener ведет себя странно - я касаюсь EditText, а затем появляется программная клавиатура (чего я не хочу). Когда я снова касаюсь, OnClickListener.onClick(), наконец, вызывается и появляется диалоговое окно.

Что делать, если я хочу, чтобы диалоговое окно отображалось сразу?

4b9b3361

Ответ 1

В отличие от большинства других элементов управления, EditText настраиваются, когда система находится в режиме "touch mode". Первое событие щелчка фокусирует элемент управления, в то время как событие второго щелчка на самом деле запускает OnClickListener. Если вы отключите фокусировку сенсорного режима с помощью атрибута android:focusableInTouchMode View, OnClickListener должен срабатывать, как ожидалось.

<EditText
        android:text="@+id/EditText01"
        android:id="@+id/EditText01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="false" />

Ответ 2

Другим решением является использование 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.

Ответ 3

Похоже, вы не хотите, чтобы пользователь действительно мог вводить текст EditText. Вы просто хотите, чтобы они могли выбрать время через таймер. Так почему бы не просто кнопку, которая всплывает TimePickerDialog? Вы можете отобразить время, выбранное в TextView.

Или вы могли бы просто заменить вид EditText на TimePicker (не диалоговое окно, просто регулярное представление).

Ответ 4

Я решил это, используя настраиваемую кнопку вроде этого:

<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" />

Ответ 5

Если я правильно понял, вам просто нужно что-то вроде

<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" 

который устарел, но выполняет трюк.