ScrollView не прокручивается вообще

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

Мой код

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

    <LinearLayout android:id="@+id/scroll_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:isScrollContainer="true"
        android:orientation="vertical" >

Конечно, я уже пытался добавить/удалить свойства "fillViewport" и "isScrollContainer", и он ничего не изменил.

Спасибо заранее.

Ответы

Ответ 1

Ответ: ScrollView не работает, когда используется в качестве корневого элемента макета XML. Он должен быть обернут внутри LinearLayout.

Решение тогда:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView android:id="@+id/scroll_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true" >

        <LinearLayout android:id="@+id/scroll_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

        </LinearLayout>
    </ScrollView>
</LinearLayout>

Ответ 2

Выбранный ответ НЕ ИСПРАВЛЯЕТ!

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

Добавьте что-то вроде:

android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"

Ответ 3

удалите android:isScrollContainer в LinearLayout. В соответствии с документацией android:isScrollContainer используется для прокрутки представления. Надеюсь, это поможет вам. Для определения этой ссылки .

Ответ 4

Android Studio добавляет NestedScrollView в файл активности некоторых своих шаблонов (например, Master-Detail). Наличие ScrollView в файле фрагмента и еще один в этом файле активности фрагментов препятствует работе прокрутки. Удаление ScrollView в моем файле фрагмента и оставление его в файле активности решило проблему для меня.

Ответ 5

Scroll View как родитель не имеет проблем. Я столкнулся с такой проблемой, когда мы добавили padding/margin к прямому потомку scrollview. Держите дочерний элемент scrollview только со свойствами высоты и ширины, так как он будет работать нормально.

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:animateLayoutChanges="true"
        android:fillViewport="true">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:animateLayoutChanges="true"
            android:orientation="vertical">
</LinearLayout>
</ScrollView>

Ответ 6

Попробуй это,

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

<LinearLayout android:id="@+id/scroll_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

Ответ 7

Попробуйте это решение, просто задержите свой прокрутки, используя метод post delayed.

fragment_test.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rootRelativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:fresco="http://schemas.android.com/apk/res-auto">

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="40dp"
        android:fillViewport="true"
        android:scrollbars="none">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            ...
        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

TestFragment.java

...
private ScrollView mScrollView;
...
mScrollView = (ScrollView) mView.findViewById(R.id.scrollView);
mScrollView.setSmoothScrollingEnabled(true);
...
new Handler().postDelayed(new Runnable() {
    @Override
     public void run() {
         if(isAdded()) {
             // Scroll 1000px down
             mScrollView.smoothScrollTo(0, 1000);
         }
     }
}, 150);

Это сработало для меня, надеюсь, что это поможет.

Ответ 8

Это устранило мою проблему: я добавил android:isScrollContainer="true" в LinearLayout и удалил ScrollView Код до:

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<ScrollView
    android:id="@+id/scrollViewRecords"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:id="@+id/sheepList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

    </LinearLayout>
</ScrollView>
</LinearLayout>

Код после

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:isScrollContainer="true">

    <LinearLayout
        android:id="@+id/sheepList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

    </LinearLayout>
</LinearLayout>

Ответ 9

Есть ли способ закрыть этот вопрос? он старый, и в настоящее время ответ, обозначенный как действительный, не имеет смысла. Единственное, что относится к ScrollView прямо сейчас:

Группа просмотра, которая позволяет прокручивать иерархию представления, размещенную внутри нее. В представлении прокрутки может находиться только один прямой ребенок, помещенный внутри него. Чтобы добавить несколько представлений в представление прокрутки, сделайте прямую дочернюю вас группу добавления, например LinearLayout, и поместите дополнительные виды в этот LinearLayout. Никогда не добавляйте RecyclerView или ListView в прокрутку. Это приводит к плохой производительности пользовательского интерфейса и плохой работе пользователя.

Взято из официальной документации: https://developer.android.com/reference/android/widget/ScrollView.html

Ответ 10

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

В любом случае, если у вас есть проблемы с этим, я обнаружил, что слушатель setOntouch испортил ваш код - по крайней мере, в моем случае это было...

Я должен обойти это, но попробуйте удалить слушателя ontouch и проверить ваш код - он должен работать

Ответ 11

Поместите пустой вид с фиксированной высотой

<View
   android:layout_width="match_parent"
   android:layout_height="50dp" />

как ваш последний элемент в линейном макете, который является дочерним элементом представления прокрутки..

Это сработало для меня..