Не реагирует программная клавиатура на пару секунд в EditText, когда я перемещаю курсор в виджете - PullRequest
0 голосов
/ 13 октября 2018

Когда я перемещаю курсор в виджете EditText, программная клавиатура не отвечает в течение нескольких секунд.

Я холодно загрузил устройство и попробовал другую клавиатуру, но проблема остается только в одном виджете EditText,Эта проблема не возникает на планшете или в эмуляторе только на этом Samsung Galaxy S7.

Это также не происходит для того же виджета EditText, когда я поворачиваю устройство в альбомную ориентацию, где экранная клавиатура покрывает экранэто собственное прикрепленное окно редактирования.Это говорит о том, что проблема является внутренней для виджета EditText, но это смешно.

В других местах приложения клавиатура работает нормально, в том числе в виджетах EditText внутри AlertDialg и EditTextPreference.

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

Я не могу легко отобразитькод здесь, поскольку он имеет много чувствительных функций в деятельности, которые было бы невозможно скрыть только для отображения на SO.

Это LogCat, начинающийся с того, что я двигаю курсор, затем многократно нажимаю Готово действие по закрытию клавиатуры.

D/ViewRootImpl@3513940[MainActivity]: ViewPostIme pointer 0
D/ViewRootImpl@3513940[MainActivity]: ViewPostIme pointer 1
D/InputMethodManager: SSI - flag : 0 Pid : 9760 view : org.pep.dungle
D/ViewRootImpl@92caa69[PopupWindow:541b8a2]: setView = android.widget.PopupWindow$PopupDecorView{a26bcee VFE...C.. ......I. 0,0-0,0} TM=true MM=false
D/ViewRootImpl@92caa69[PopupWindow:541b8a2]: dispatchAttachedToWindow
V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
D/ViewRootImpl@92caa69[PopupWindow:541b8a2]: Relayout returned: old=[0,0][0,0] new=[378,969][1458,2889] result=0x7 surface={valid=true 543940485120} changed=true
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000,  [1080x1920]-format:1
D/OpenGLRenderer: eglCreateWindowSurface = 0x7ed5e10080
D/ViewRootImpl@92caa69[PopupWindow:541b8a2]: MSG_RESIZED_REPORT: frame=Rect(378, 969 - 1458, 2889) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
D/OpenGLRenderer: eglDestroySurface = 0x7ed5e10080
D/ViewRootImpl@92caa69[PopupWindow:541b8a2]: dispatchDetachedFromWindow
D/InputEventReceiver: channel '69e6cbf PopupWindow:541b8a2 (client)' ~ Disposing input event receiver.
D/InputEventReceiver: channel '69e6cbf PopupWindow:541b8a2 (client)' ~NativeInputEventReceiver.
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: setView = android.widget.PopupWindow$PopupDecorView{289c208 VFE...C.. ......I. 0,0-0,0} TM=true MM=false
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: dispatchAttachedToWindow
V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: Relayout returned: old=[0,0][0,0] new=[378,1035][1458,2955] result=0x7 surface={valid=true 543940485120} changed=true
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000,  [1080x1920]-format:1
D/OpenGLRenderer: eglCreateWindowSurface = 0x7ed5e10080
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: MSG_RESIZED_REPORT: frame=Rect(378, 1035 - 1458, 2955) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 0
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: ViewPostIme pointer 1
D/OpenGLRenderer: eglDestroySurface = 0x7ed5e10080
D/ViewRootImpl@9b68bab[PopupWindow:541b8a2]: dispatchDetachedFromWindow
D/InputEventReceiver: channel '71f96d5 PopupWindow:541b8a2 (client)' ~ Disposing input event receiver.
    channel '71f96d5 PopupWindow:541b8a2 (client)' ~NativeInputEventReceiver.
D/InputMethodManager: HSIFW - flag : 0 Pid : 9760
D/ViewRootImpl@3513940[MainActivity]: MSG_RESIZED: frame=Rect(0, 0 - 1080, 1920) ci=Rect(0, 72 - 0, 0) vi=Rect(0, 72 - 0, 0) or=1

И это LogCat, когда я перемещаю курсор, затем жду события Удаляемый входной приемник , после чего первое нажатие Готово действие закрывает клавиатуру.Хотя я не уверен, что это потому, что приемник входных событий был отключен, или потому что я подождал пару секунд, прежде чем нажать действие Готово .

D/ViewRootImpl@3513940[MainActivity]: ViewPostIme pointer 0
D/ViewRootImpl@3513940[MainActivity]: ViewPostIme pointer 1
D/InputMethodManager: SSI - flag : 0 Pid : 9760 view : org.pep.dungle
D/ViewRootImpl@f9bed82[PopupWindow:efec7f7]: setView = android.widget.PopupWindow$PopupDecorView{7f4b4d0 VFE...C.. ......I. 0,0-0,0} TM=true MM=false
D/ViewRootImpl@f9bed82[PopupWindow:efec7f7]: dispatchAttachedToWindow
V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
D/ViewRootImpl@f9bed82[PopupWindow:efec7f7]: Relayout returned: old=[0,0][0,0] new=[378,969][1458,2889] result=0x7 surface={valid=true 543931449344} changed=true
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000,  [1080x1920]-format:1
D/OpenGLRenderer: eglCreateWindowSurface = 0x7ee0a40710
D/ViewRootImpl@f9bed82[PopupWindow:efec7f7]: MSG_RESIZED_REPORT: frame=Rect(378, 969 - 1458, 2889) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
D/OpenGLRenderer: eglDestroySurface = 0x7ee0a40710
D/ViewRootImpl@f9bed82[PopupWindow:efec7f7]: dispatchDetachedFromWindow
D/InputEventReceiver: channel '78a5217 PopupWindow:efec7f7 (client)' ~ Disposing input event receiver.
    channel '78a5217 PopupWindow:efec7f7 (client)' ~NativeInputEventReceiver.
D/ViewRootImpl@ca42c85[PopupWindow:efec7f7]: setView = android.widget.PopupWindow$PopupDecorView{b55aada VFE...C.. ......I. 0,0-0,0} TM=true MM=false
D/ViewRootImpl@ca42c85[PopupWindow:efec7f7]: dispatchAttachedToWindow
V/Surface: sf_framedrop debug : 0x4f4c, game : false, logging : 0
D/ViewRootImpl@ca42c85[PopupWindow:efec7f7]: Relayout returned: old=[0,0][0,0] new=[378,1035][1458,2955] result=0x7 surface={valid=true 543931449344} changed=true
D/mali_winsys: EGLint new_window_surface(egl_winsys_display *, void *, EGLSurface, EGLConfig, egl_winsys_surface **, egl_color_buffer_format *, EGLBoolean) returns 0x3000,  [1080x1920]-format:1
D/OpenGLRenderer: eglCreateWindowSurface = 0x7ed5fbc180
D/ViewRootImpl@ca42c85[PopupWindow:efec7f7]: MSG_RESIZED_REPORT: frame=Rect(378, 1035 - 1458, 2955) ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
D/OpenGLRenderer: eglDestroySurface = 0x7ed5fbc180
D/ViewRootImpl@ca42c85[PopupWindow:efec7f7]: dispatchDetachedFromWindow
D/InputEventReceiver: channel '18797ed PopupWindow:efec7f7 (client)' ~ Disposing input event receiver.
    channel '18797ed PopupWindow:efec7f7 (client)' ~NativeInputEventReceiver.
D/InputMethodManager: HSIFW - flag : 0 Pid : 9760
D/ViewRootImpl@3513940[MainActivity]: MSG_RESIZED: frame=Rect(0, 0 - 1080, 1920) ci=Rect(0, 72 - 0, 0) vi=Rect(0, 72 - 0, 0) or=1

Как проблемане встречается на других устройствах или где-либо еще в приложении, я не понимаю, где искать проблему.

РЕДАКТИРОВАТЬ

Макет для EditTextwidget.

<EditText
    android:id="@+id/editText"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    android:background="@android:color/transparent"
    android:hint="@string/hint"
    android:imeOptions="actionDone"
    android:inputType="text"
    android:singleLine="true"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/bottom_guideline" />

Обработка кода во фрагменте.

    EditText editText = view.findViewById(R.id.editText);

    editText.setOnEditorActionListener((textView, actionId, event) ->
                                           {
                                               boolean handled = false;

                                               if (actionId == EditorInfo.IME_ACTION_DONE)
                                               {
                                                   // Save value.
                                                   valueOfEditText = textView.getText().toString();

                                                   // Shutdown the keyboard.
                                                   InputMethodManager imm = (InputMethodManager) textView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                                                   //noinspection ConstantConditions
                                                   imm.hideSoftInputFromWindow(textView.getWindowToken(), 0);

                                                   // Signal that we handled the input so any other listeners higher up will ignore it.
                                                   handled = true;
                                               }

                                               return handled;
                                           });

UPDATE Теперь без каких-либо изменений в коде проблема возникает, даже если я открываю EditTextи ничего не делать вообще.Теперь мне нужно подождать пару секунд, чтобы щелкнуть клавишу возврата после ввода поля EditText.

Как всегда, мне приходится ждать вызова dispatchDetachedFromWindow, прежде чем я смогу внести какие-либо изменения в текст илинажмите кнопку «Готово».И я не могу вызвать этот метод напрямую в каком-то слушателе, потому что он является частью ViewRootImpl.

Я начинаю задаваться вопросом, является ли это чем-то локальным для этого телефона, а не для всех устройств S7.

ОБНОВЛЕНИЕ Сброс устройства решил любую проблему, вызвавшую это.Так что это была локальная проблема на устройстве, код не связан.

...