Я потратил часы на отладку той же проблемы, описанной в следующих вопросах:
Android: как мне не допустить, чтобы программная клавиатура открывала мой взгляд?
Как не допустить, чтобы софт-клавиатура поднимала мой макет?
Android: как мне не дать программной клавиатуре выдвинуть мой взгляд вверх?
Общепринятый ответ заключается в добавлении android:windowSoftInputMode="adjustPan"
к декларации действия манифеста. Это работает, чтобы экран оставался на месте, когда клавиатура открыта, однако он не останавливает прокрутку экрана при вводе текста, который содержит больше строк, чем может отобразить экран. Вот что я вижу, когда внедряю это решение:
Заголовок остается при открытии клавиатуры, однако, если вы наберете несколько строк, заголовок в конечном итоге прокрутится с верхней части экрана.
Я пытался найти эту проблему, чтобы попытаться решить ее, но ни одно из решений не помогло. Тогда мне удалось решить это, выполнив противоположное тому, что сказал принятый ответ выше.
Для справки, мой 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"/>