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" />
как ваш последний элемент в линейном макете, который является дочерним элементом представления прокрутки..
Это сработало для меня..