ScrollView根本不滚动

时间:2013-02-11 11:09:30

标签: android scroll android-linearlayout android-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”属性,但它根本没有改变任何内容。

提前致谢。

12 个答案:

答案 0 :(得分:20)

答案:当用作XML布局的根元素时,ScrollView无法正常工作。它必须包含在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" >

答案 1 :(得分:5)

❌尝试了上述所有答案,但我的问题仍未解决。 经过一些调试和更改后,我的问题得到了解决,即 ScrollView 正在滚动。

  • 我们无需向 ScrollView 添加任何父元素即可使其滚动(如此处的其他一些答案中所述)。

✔️修复是针对我的问题✔️

  • 将 ScrollView 的高度更改为 0dp

    android:layout_height="0dp"

  • 将顶部和底部限制为父/各自的视图/元素

    app:layout_constraintTop_toBottomOf="@+id/imageView4" app:layout_constraintBottom_toBottomOf="parent"

最终的 xml 看起来像这样

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintTop_toBottomOf="@+id/imageView4"
    app:layout_constraintBottom_toBottomOf="parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

           <!-- Loong content -->

    </LinearLayout>
</ScrollView>

答案 2 :(得分:3)

所选答案不正确!

您可以使用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 :(得分:2)

删除android:isScrollContainer中的LinearLayout。根据文档android:isScrollContainer用于设置视图可滚动。我希望它对你有所帮助。有关定义,请参阅此link

答案 4 :(得分:2)

Android Studio将NestedScrollView添加到其某些模板的活动文件中(例如Master-Detail)。在片段文件中有一个ScrollView,在该片段的活动文件中有一个ScrollView阻止了滚动视图的工作。删除我的片段文件中的ScrollView并将其留在活动文件中解决了我的问题。

答案 5 :(得分:1)

以父级滚动查看没有问题。当我们向scrollview的直接子级添加填充/边距时,我遇到了此类问题。保持scrollview的子级仅具有height和width属性,可以正常使用。

    <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 :(得分:0)

尝试此解决方案,只需使用后延迟方法延迟滚动。

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);

这对我有用,希望这有帮助。

答案 7 :(得分:0)

这解决了我的问题:我将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>

答案 8 :(得分:0)

有没有办法解决这个问题?它是旧的,目前标记为有效的答案没有意义。关于ScrollView现在唯一有效的是:

  

一个视图组,允许滚动放置在其中的视图层次结构。 滚动视图中只能放置一个直接子项。要在滚动视图中添加多个视图,请将直接子项添加到视图组(例如LinearLayout),并在该LinearLayout中放置其他视图。   切勿将RecyclerView或ListView添加到滚动视图。这样做会导致用户界面性能下降和用户体验不佳。

取自官方文件:https://developer.android.com/reference/android/widget/ScrollView.html

答案 9 :(得分:0)

我终于弄明白了,我花了5个小时逐步构建所有内容,并每次都对其进行测试。...

无论如何,如果您对此有疑问,我会发现setOntouch监听器正在弄乱您的代码-至少在我看来,这是...

我必须设法解决它,但是尝试删除您的ontouch监听器并测试您的代码-它必须正常工作

答案 10 :(得分:0)

尝试一下

<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" >

答案 11 :(得分:0)

    <LinearLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
......
</LinearLayout>
</ScrollView>
</LinearLayout>