试图了解ScrollView中LinearLayout的边距

时间:2011-09-24 14:54:37

标签: android user-interface android-layout padding margin

我需要在LinearLayout内加SrollView,而LinearLayout必须有ScrollView的保证金。首先,我能想到解决该问题的唯一方法是在另一个LinearLayout内部LinearLayout,并在最后一个布局上设置边距。如果它们设置在外部LinearLayout.

中,它们将无法工作

示例:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:fillViewport="true"
    android:background="@color/layout_color_green">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@color/layout_color_yellow">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp"
            android:orientation="vertical"
            android:background="@color/layout_color_blue">
        </LinearLayout>
    </LinearLayout>
</ScrollView>

enter image description here

我的问题是:为什么我需要这样做?

如果我只有一个LinearLayout,则没有边距......

示例:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:fillViewport="true"
    android:background="@color/layout_color_green">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        android:orientation="vertical"
        android:background="@color/layout_color_blue">
    </LinearLayout>
</ScrollView>

enter image description here

然后,搜索一些类似的问题,我找到了一些布局,让我想到在ScrollView中使用填充而不是LinearLayout中的边距。这也解决了我的问题,我不需要另一个LinearLayout。这是一个更优雅的解决方案。

仍然,我想了解为什么LinearLayout内的简单边距在ScrollView内部不起作用。因为如果它不在ScrollView内,它确实可以正常工作。

任何人都知道为什么?

2 个答案:

答案 0 :(得分:16)

我在源代码中挖掘了一点:

ScrollView延伸FrameLayout。这个问题本身有一些保证金问题,而ScrollView甚至没有尝试解决这个问题。在测量时,边际基本上被忽略了。

但最终它并不重要,因为你应该能够在ScrollView本身定义一个填充(这是一个肯定,没有尝试)。单个子视图不应该有保证金。

答案 1 :(得分:11)

Hello Knickedi和Ricardo Amaral,

虽然这个答案标记为已解决,但我想对此问题进行一些说明。

正如Knickedi所说,ScrollView扩展了FrameLayout。

所以我的答案是你可以在scrollView中设置LinearLayout的layout_gravity,然后layout_margin将在LinearLayout中工作,就像FrameLayout中的linearLayout一样。

我有同样的问题,我已经应用了这个,它对我有用。 :)

示例:

<ScrollView
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">

                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="top"
                    android:layout_marginTop="30dp"
                    android:orientation="vertical" >
</ScrollView>