Scrollview超越了屏幕底部

时间:2013-06-02 06:19:18

标签: android android-scrollview

我突然遇到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>

它没有比这更简单。一旦你完全向下滚动(如滚动条的形状所示),你应该看到底部的白色边缘,但这就是它的样子:

bottom of the scrollview

与顶部比较:

top of the scrollview

底部应该看起来像顶部,只能反转。这种情况发生在模拟器,真实设备和我尝试过的几乎所有Android版本中。我不知道我做错了什么(如果有的话......)。

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

3 个答案:

答案 0 :(得分:8)

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

无论如何,为了那些稍后会在这里翻牌的人的利益,这里是一个并排的示意图,左侧是一个破碎的布局(上面一个版本更简单),另一个是右边的工作版。诀窍是用额外容器上的填充来模拟verboten边缘。

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

答案 1 :(得分: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>

enter image description here

答案 2 :(得分: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>