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

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

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

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

В отличие от большинства других элементов управления, EditText s настраивается, когда система находится в режиме «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" /> 

Другое решение – использовать 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 событие обрабатывается и клавиатура не будет всплывать. Если вы хотите, чтобы клавиатура по-прежнему всплывала и регистрировалась, вы должны вернуть ее.

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

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

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

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

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