Android: держите TextInputEditText в поле зрения при наборе текста

Я пытаюсь создать действие с парой элементов TextInputEditText. Они размещаются примерно на полпути вниз по странице, поэтому, когда они появляются, они закрываются клавиатурой. Таким образом, я пытаюсь использовать windowSoftInputMode = "adjustPan" внутри AppManifest.xml, чтобы экран прокручивался, чтобы текстовые поля оставались в поле зрения при наборе текста.

Однако все попытки сделать это, похоже, терпят неудачу. Ниже представлена ​​иерархия макетов, которую я использую, а также некоторые примеры решений, которые я уже безрезультатно пытался.

макет xml

<ScrollView
    android:layout_height = "match_parent"
    android:layout_width = "match_parent"
    xmlns:android = "http://schemas.android.com/apk/res/android"
    android:fillViewport = "true"
    android:isScrollContainer = "false">

    <android.support.constraint.ConstraintLayout
        xmlns:android = "http://schemas.android.com/apk/res/android"
        xmlns:app = "http://schemas.android.com/apk/res-auto"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content">

        <android.support.design.widget.TextInputLayout
            android:id = "@+id/inputA"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content">

            <android.support.design.widget.TextInputEditText
                android:id = "@+id/inputAText"
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"/>

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id = "@+id/inputB"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content">

            <android.support.design.widget.TextInputEditText
                android:id = "@+id/inputBText"
                android:layout_width = "match_parent"
                android:layout_height = "match_parent"/>

        </android.support.design.widget.TextInputLayout>

   </android.support.constraint.ConstraintLayout>

</ScrollView>

Фрагмент AndroidManifest.xml

<activity
    android:name = ".activities.MyActivity"
    android:windowSoftInputMode = "adjustPan"
    android:screenOrientation = "sensorPortrait"
    android:theme = "@style/AppTheme.NoActionBar" />

Попытки решения

  1. Добавьте windowSoftInputMode = "adjustPan" к соответствующему activity в AppManifest.xml (я также пробовал adjustResize и adjustPan|adjustNothing в соответствии с другими предложениями StackOverflow)
  2. Поместите ConstraintLayout в ScrollView.
  3. Добавьте android:isScrollContainer = "false" в указанный ScrollView
  4. Восстановите файл макета, используя только ConstraintLayout и TextInputEditText, ограниченные нижней частью указанного макета.
  5. Измените TextInputEditText на EditText и удалите TextInputLayout
  6. Поменял ConstraintLayout на RelativeLayout

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

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

Suresh 13.11.2018 11:59

Увы, ни одно решение не помогло, но спасибо!

Tom Barden 13.11.2018 12:06

Не понял тебя. (Мой плохой английский). Могу я узнать, что вы пытаетесь сказать? Какой из них сработал?

Suresh 13.11.2018 12:07

Извините, они оба не сработали.

Tom Barden 13.11.2018 12:08

Вы пробовали без строки android: windowSoftInputMode = "adjustPan" в манифесте. Думаю, по умолчанию это сделает вид. Вы используете реальное устройство для тестирования или эмулятор?

Suresh 13.11.2018 12:11

Я пробовал удалить android:windowSoftInputMode = "adjustPan" из манифеста, но, к сожалению, это тоже не сработало.

Tom Barden 13.11.2018 12:16

Вы используете настоящее устройство или эмулятор?

Suresh 13.11.2018 12:17

Ах, извините, тестирую на нескольких реальных устройствах.

Tom Barden 13.11.2018 12:18

Позвольте нам продолжить обсуждение в чате.

Suresh 13.11.2018 12:20
4
9
317
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел проблему! В своей теме я заявил <item name = "android:windowTranslucentStatus">true</item>. По какой-то причине это ломает windowSoftInputMode = "adjustPan", и поэтому я удалил его.

Чтобы строка состояния была прозрачной, я использую <item name = "android:statusBarColor">@color/transparent</item>.

Надеюсь, кто-нибудь когда-нибудь сочтет это полезным.

Другие вопросы по теме