Программная клавиатура продолжает закрываться при нажатии на EditText ViewPager

#android #android-recyclerview #android-edittext #android-softkeyboard

#Android #android-recyclerview #android-edittext #android-программная клавиатура

Вопрос:

У меня есть фрагмент, который содержит ViewPager2 из 2 фрагментов. Во втором дочернем фрагменте у меня есть recyclerview, viewholder которого содержит TextView и EditText.

В эмуляторе, когда я нажимаю в EditView, программная клавиатура продолжает закрываться.

На реальном устройстве (Sony xperia XA) программная клавиатура не закрывается, но она всегда фокусируется на первом редактируемом тексте, независимо от того, нажимаю ли я на другой EditText

Я пытался использовать android: windowSoftInputMode =»adjustPan» и android: windowSoftInputMode =»adjustResize», но это не решает проблему.

Я использую привязку данных и ConstraintLayout вне LinearLayout

 <LinearLayout
    android:id="@ id/wrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/margin"
    android:focusable="true"
    android:focusableInTouchMode="true"
    tools:context="vn.com.ntn.obee.screens.fragments.exercise.InputQuestionFragment">

    <androidx.cardview.widget.CardView
        android:id="@ id/cardView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/margin_medium"
        android:layout_marginEnd="@dimen/margin_medium"
        android:layout_marginBottom="@dimen/margin_medium"
        android:paddingTop="@dimen/margin"
        android:paddingBottom="@dimen/margin_medium"
        app:cardCornerRadius="20dp"
        app:cardElevation="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@ id/layoutQuestion"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/question_drawable"
            android:orientation="vertical"
            android:paddingTop="@dimen/margin"
            android:paddingBottom="@dimen/margin"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent">

            <vn.com.ntn.obee.screens.views.SelectableTextView
                android:id="@ id/tvQuestion"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:lineSpacingMultiplier="1.6"
                android:maxHeight="200dp"
                android:paddingStart="@dimen/margin_medium"
                android:paddingEnd="@dimen/margin_medium"
                android:paddingTop="@dimen/margin"
                android:paddingBottom="@dimen/margin_medium"
                android:scrollbars="vertical"
                android:fontFamily="@font/proxima_nova_bold"
                android:textColor="@color/white"
                android:textSize="@dimen/text_size_normal"
                app:htmlText="@{answer.content ?? answerResult.contentExtend}"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <EditText
                android:id="@ id/etAnswer"
                android:layout_width="match_parent"
                android:layout_height="@dimen/size_icon_x5"
                android:hint="@string/enter_your_answer_here"
                android:paddingStart="@dimen/margin_medium"
                android:paddingEnd="@dimen/margin_medium"
                android:paddingBottom="2dp"
                android:layout_marginStart="@dimen/margin_medium"
                android:layout_marginEnd="@dimen/margin_medium"
                android:layout_marginBottom="@dimen/margin_small"
                android:background="@drawable/bg_input_question_edittext"
                android:fontFamily="@font/proxima_nova_bold"
                android:textColor="@color/pink"
                android:textColorHint="#FFC9C9"
                android:textSize="@dimen/text_size_medium"
                android:singleLine="true"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tvQuestion"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintVertical_bias="1"/>
        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.cardview.widget.CardView>

</LinearLayout>
  

Я думаю, что в этом журнале может быть проблема:

 2020-10-12 00:20:43.527 3051-3051/? I/KeyboardViewUtil: KeyboardViewUtil.getKeyboardHeightRatio():128 systemKeyboardHeightRatio:1.000000; userKeyboardHeightRatio:1.000000.
2020-10-12 00:20:43.528 3051-3051/? I/AndroidIME: AbstractIme.onActivate():83 LatinIme.onActivate() : EditorInfo = Package = com.nghianguyen.obee_android.debug : Type = Text : Learning = Enable : Suggestion = Show : AutoCorrection = Enable : Microphone = Show : NoPersonalizedLearning = Disable, IncognitoMode = false
2020-10-12 00:20:43.529 3051-3051/? I/Delight5Facilitator: Delight5Facilitator.initializeForIme():572 initializeForIme() : Locale = [en_US], layout = qwerty
2020-10-12 00:20:43.529 3051-3051/? I/VoiceInputManagerWrapper: VoiceInputManagerWrapper.cancelShutdown():54 cancelShutdown()
2020-10-12 00:20:43.529 3051-3051/? I/VoiceInputManagerWrapper: VoiceInputManagerWrapper.syncLanguagePacks():66 syncLanguagePacks()
2020-10-12 00:20:43.557 3051-6376/? I/SpeechFactory: SpeechRecognitionFactory.maybeScheduleAutoPackDownloadForFallback():155 maybeScheduleAutoPackDownloadForFallback()
2020-10-12 00:20:43.569 1845-1845/? E/servicemanager: Could not find android.hardware.power.IPower/default in the VINTF manifest.
2020-10-12 00:20:43.596 3051-3051/? I/KeyboardWrapper: KeyboardWrapper.consumeEvent():264 Skip consuming an event as current keyboard is deactivated (state=0, keyboard existence=true)
2020-10-12 00:20:43.669 3051-3051/? W/KeyboardModeManager: KeyboardModeManager.setInputView():359 setInputView() : inputView = com.google.android.apps.inputmethod.libs.framework.core.InputView{cb5f35e V.E...... ......ID 0,0-1080,2022}
2020-10-12 00:20:43.672 3051-3051/? I/ConversationToQueryExtension: ConversationToQueryExtension.isEnabledForHostApp():254 Conv2Query not enabled due to current app [com.nghianguyen.obee_android.debug] not in whitelist
2020-10-12 00:20:43.672 3051-3051/? I/ConversationToQueryExtension: ConversationToQueryExtension.onActivate():165 onActivate() : Disabled by unsupported host app
   
  

Комментарии:

1. можете ли вы поделиться XML-макетом элемента?

2. @NehaK Я обновил XML-макет элемента в вопросе

3. можете ли вы опубликовать код «vn.com.ntn.obee.screens.views. SelectableTextView »

4. для меня он работает нормально, но не пробовал с SelectableTextView, проблема может быть только в этом

5. @NehaK Я попытался удалить SelectableTextView, но это не проблема

Ответ №1:

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

  • Дочерний фрагмент ViewPager.
  • Элемент представления переработчика.

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

Примечание: использование NestedScrollView для переноса моего представления в режиме рециркуляции решает мою проблему, но это мешает мне прокручивать представление в режиме рециркуляции

Комментарии:

1. Привет @KhoaChau Я также использую ViewPager2, и один из фрагментов содержит RecyclerView, а элемент в RecyclerView содержит EditText. Клавиатура продолжает закрываться при нажатии на EditText, поэтому из вашего решения -> означает, что все элементы RecyclerView не могут использовать ConstraintLayout?