Подтвердить что ты не робот

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>
4b9b3361

Ответ 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.