9

我突然遇到 Scrollview 超出屏幕底部的问题,因此即使您一直向下滚动它也不会显示其所有内容。XML 是:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFFFF">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:background="#FFBBBBBB"
        android:orientation="vertical" >
        <View
            android:layout_width="100dp"
            android:layout_height="300dp"
            android:layout_margin="15dp"
            android:layout_gravity="center_horizontal"
            android:background="#FFDDDDFF"/>
        <View
            android:layout_width="100dp"
            android:layout_height="300dp"
            android:layout_margin="15dp"
            android:layout_gravity="center_horizontal"
            android:background="#FFDDDDFF"/>
    </LinearLayout>
</ScrollView>

没有比这更简单的了。一旦您一直向下滚动(如滚动条的形状所示),您应该会看到底部的白色边距,但实际上是这样的:

滚动视图的底部

与顶部比较:

滚动视图的顶部

底部应该看起来像顶部,只是颠倒了。这发生在模拟器、真实设备以及我尝试过的几乎所有 Android 版本中。我不知道我做错了什么(如果有的话......)。

请不要猜测,不要从臀部射击!只有经过测试的答案。我已经在这上面浪费了足够的时间。谢谢。

4

3 回答 3

10

在死胡同里浪费了很多时间之后,我终于被另一个 SO 线程放在了正确的轨道上:问题是 LinearLayout 上的布局边距。显然 ScrollView 不喜欢这样,就像它不喜欢它的孩子居中一样(许多其他人标记的问题,但这里不是我的问题),谁知道还有什么。非常挑剔的小部件。正是这样的问题让我重新考虑了我对 Android 的承诺:与其他平台相比,它太耗时了,即使你喜欢挑战,时间就是金钱。

无论如何,为了那些稍后会在这里失败的人的利益,这里有一个并排演示左侧的损坏布局(上面的一个更简单的版本)和右侧的工作布局。诀窍是在一个额外的容器上使用填充来模拟verboten margin。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00FFFF"
    android:orientation="horizontal"
    android:baselineAligned="false">
    <ScrollView        
        android:layout_width="0dp"
        android:layout_weight="1"    
        android:layout_height="match_parent"
        android:background="#FFFFFFFF">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:background="#FFBBBB22"
            android:orientation="vertical">
            <View
                android:layout_width="100dp"
                android:layout_height="1000dp"
                android:layout_margin="15dp"
                android:layout_gravity="center_horizontal"
                android:background="#FFDDDDFF"/>
        </LinearLayout>
    </ScrollView>
    <View 
        android:layout_width="1dp"
        android:layout_height="match_parent"
        android:background="#FF000000"/>
    <ScrolllView 
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:background="#FFFFFFFF">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="15dp"
            android:background="#FFFFFF"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="#FFBBBB22"
                android:orientation="vertical">
                <View
                    android:layout_width="100dp"
                    android:layout_height="1000dp"
                    android:layout_margin="15dp"
                    android:layout_gravity="center_horizontal"
                    android:background="#FFDDDDFF"/>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</LinearLayout>
于 2013-06-02T17:54:36.197 回答
0

尝试在滚动视图的底部放置一个填充,以便您在底部看到一条白线 - 您的视图确实一直向下滚动,我用这段代码尝试过,结果是这样的:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:background="#FFFFFFFF"
    android:padding="5dp" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    android:background="#FFBBBBBB"
    android:orientation="vertical" >

    <View
        android:layout_width="100dp"
        android:layout_height="1500dp"
        android:layout_gravity="center_horizontal"
        android:layout_margin="15dp"
        android:background="#FFDDDDFF" />

    <View
        android:layout_width="100dp"
        android:layout_height="300dp"
        android:layout_gravity="center_horizontal"
        android:layout_margin="15dp"
        android:background="#FFDDDDFF" />

    <View
        android:layout_width="100dp"
        android:layout_height="10dp"
        android:layout_gravity="center_horizontal"
        android:layout_margin="15dp"
        android:background="#FF00FF00" />
</LinearLayout>

在此处输入图像描述

于 2013-06-02T08:05:27.070 回答
0

只需尝试将 LinearLayout 放在另一个里面就像这样:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFFFF">

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

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            android:background="#FFBBBBBB"
            android:orientation="vertical">

            <View
                android:layout_width="100dp"
                android:layout_height="300dp"
                android:layout_gravity="center_horizontal"
                android:layout_margin="15dp"
                android:background="#FFDDDDFF" />

            <View
                android:layout_width="100dp"
                android:layout_height="300dp"
                android:layout_gravity="center_horizontal"
                android:layout_margin="15dp"
                android:background="#FFDDDDFF" />
        </LinearLayout>
    </LinearLayout>
</ScrollView>
于 2016-05-19T18:06:03.997 回答