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

StackOverflow https://stackoverflow.com/questions/2119072

Вопрос

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

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

Что делать, если я хочу, чтобы диалог появился немедленно?

Это было полезно?

Решение

В отличие от большинства других элементов управления, EditTexts можно фокусировать, пока система находится в «сенсорном режиме».Первое событие щелчка фокусирует элемент управления, а второе событие фактически запускает элемент управления. 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" 

который устарел, но делает свое дело.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top