Обнаруживать касание EditText, но не прерывать его?

Мне нужно знать, когда пользователь прикасается/нажимает на edittext в моей активности.

Как я могу это сделать без прерывания событий, поэтому клавиатура по-прежнему отображается правильно?

(И мне нужно знать об этом, прежде чем ОС отобразит клавиатуру... если возможно)

Ответ 1

txtEdit.setOnTouchListener(new View.OnTouchListener(){
    public boolean onTouch(View view, MotionEvent motionEvent) {                                                       
         // your code here....
         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);                
         return false;
    }
});

Ответ 2

View.OnTouchListener onTouchListener = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction() == MotionEvent.ACTION_UP){

...


}

Ответ 3

Вы должны сделать это, добавив OnClickListener в свой EditText. Если вы беспокоитесь о блокировке потока пользовательского интерфейса в своем OnClickListener, вы можете создать новую тему и выполнить свою работу там - хотя, если вы это сделаете, нет гарантии, что работа будет выполнена до появления клавиатуры.

Ответ 4

Меньше подробностей

Тот же подход Матиаса Конрадта, но используя kotlin:

txtEdit.setOnTouchListener({ view, motionEvent ->
    // your code here....
    false
})

Эта строка getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); не нужна, поскольку клавиатура отображается, когда вы нажимаете вид редактирования.

Ответ 5

OnTouchListener дважды OnTouchListener (на Пикселе 2 работает Pie). Поэтому вместо этого я использовал OnFocusChangeListener:

txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                    Log.d(TAG,"Focused Now!");
                }
            }
        });