Android ScrollView отказывается прокручивать донизу
У меня есть элемент scrollview root с релятивизацией в нем и куча элементов формы внутри относительной компоновки.
По какой-то причине, когда мягкая клавиатура вставлена, кажется, что она не может прокручиваться до самого низа, что порезает одну из моих кнопок пополам.
Вот скриншот просмотра иерархии, чтобы продемонстрировать, что я имею в виду.
![enter image description here]()
Как вы можете видеть, система знает, что представление продолжается за клавиатурой, но scrollview (который правильно заполняет видимую часть экрана) не будет продолжать прокручивать вниз, как следует.
У меня есть android:windowSoftInputMode="adjustResize"
в манифесте для активности, и я могу/не переключать его на панорамирование.
Любая помощь приветствуется.
edit: Я вижу это более чем в 1 представлении. Вот xml другого представления с той же проблемой:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/background" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="32dp" >
<EditText
android:id="@+id/reset_oldpass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:ems="10"
android:singleLine="true"
android:hint="@string/current_password"
android:layout_marginTop="16dp" />
<EditText
android:id="@+id/reset_pass1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/reset_oldpass"
android:ems="10"
android:hint="@string/reset_new_pass"
android:inputType="textPassword"
android:layout_marginTop="16dp" />
<EditText
android:id="@+id/reset_pass2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/reset_pass1"
android:ems="10"
android:hint="@string/reset_confirm_pass"
android:inputType="textPassword"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/reset_forgot_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/reset_pass2"
android:layout_marginTop="16dp"
android:textColor="@color/Link"
android:textStyle="bold"
android:text="@string/Login_forgot_password" />
<Button
android:id="@+id/reset_reset_password_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/reset_forgot_password"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:layout_marginBottom="32dp"
android:text="@string/reset_change_pass" />
</RelativeLayout>
</ScrollView>
Ответы
Ответ 1
Это действительно странно, но, похоже, это вызвано android:layout_margin="32dp"
в RelativeLayout. Как только я его вынул, свиток работал правильно.
Конечно, из-за этого мне пришлось добавить в мои элементы формы больше полей, но по крайней мере это теперь исправлено.
Ответ 2
У меня была такая же проблема, и я исправил ее, используя пробел в ScrollView вместо поля в RelativeLayout.
Итак, удалите android:layout_margin="32dp"
из RelativeLayout (дочерний элемент ScrollView) и добавьте android:padding="32dp"
в ScrollView.
Ответ 3
Вы также можете вставить ложное представление для имитации нижнего поля следующим образом:
<View
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_below="@id/recompensaLabel"
android:layout_marginTop="0dp"
android:id="@+id/simulate_bottom_margin_view"
/>
Эффект тот же, вам нужно только вставить его под последний элемент в свой Relative Layout.
Ответ 4
У меня была эта проблема с приложением, и выяснилось, что это связано с тем, что ScrollView layout_height настроен на перенос содержимого. Проблема в том, что если у вас достаточно контента для использования ScrollView, вы не хотите обертывать контент, потому что нижняя часть ScrollView отключена на экране какой-то произвольной суммой. У меня не было достаточного количества данных, которые могли бы быть затронуты этим, поскольку мне не нужен ScrollView, пока клавиатура не выскочила. По внешнему виду, ОП находилась в той же ситуации.
Теперь, когда клавиатура всплывает, нижняя часть ScrollView поднимается на том же уровне, что и высота клавиатуры, и заканчивается под верхней частью клавиатуры тем же произвольным количеством, которое было ниже нижней части видимой экран.
В конечном итоге мое исправление заключалось в том, чтобы связать верхнюю часть ScrollView с моей панелью инструментов, а затем щелкнуть правой кнопкой мыши ScrollVIew в дереве и выбрать "центр по вертикали" (не в родительской опции). Теперь работает как шарм. Layout_height должен автоматически перейти на 0dp.