Android: ввод текста с помощью программной клавиатуры в ScrollView, увеличивая количество заголовков - PullRequest
0 голосов
/ 11 июня 2019

Я потратил часы на отладку той же проблемы, описанной в следующих вопросах:

Android: как мне не допустить, чтобы программная клавиатура открывала мой взгляд?

Как не допустить, чтобы софт-клавиатура поднимала мой макет?

Android: как мне не дать программной клавиатуре выдвинуть мой взгляд вверх?

Общепринятый ответ заключается в добавлении android:windowSoftInputMode="adjustPan" к декларации действия манифеста. Это работает, чтобы экран оставался на месте, когда клавиатура открыта, однако он не останавливает прокрутку экрана при вводе текста, который содержит больше строк, чем может отобразить экран. Вот что я вижу, когда внедряю это решение:

enter image description here

Заголовок остается при открытии клавиатуры, однако, если вы наберете несколько строк, заголовок в конечном итоге прокрутится с верхней части экрана.

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

Для справки, мой XML-файл макета:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"/>

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toBottomOf="@id/header"
        android:fillViewport="true">

        <EditText
            android:id="@+id/noteText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"
            android:windowSoftInputMode="adjustPan"/>

    </ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

Мой манифест:

    <activity android:name=".activity.MainActivity"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="adjustPan"
        android:resizeableActivity="true"
        tools:targetApi="n"/>

1 Ответ

0 голосов
/ 11 июня 2019

Я решил эту проблему, изменив объявление действия манифеста, чтобы удалить строку android:windowSoftInputMode="adjustPan" из манифеста:

    <activity android:name=".activity.MainActivity"
        android:screenOrientation="portrait"
        android:resizeableActivity="true"
        tools:targetApi="n"/>

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

Надеясь, что я смогу сэкономить время, которое понадобилось мне, чтобы понять это. Вот как это выглядит после исправления манифеста:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...