我需要在
ScrollView
中放置一个带边距的 LinearLayout
。一开始,我所能想到的解决方法是在一个包含边距的 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>
我的问题是:为什么我需要这样做?
如果我只有一个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>
在寻找类似问题时,我发现一些布局采用在ScrollView
中使用内边距(padding)而不是在LinearLayout
中使用外边距(margin)的方式,这也解决了我的问题,并且我不需要再嵌套一个LinearLayout
。这是一种更优雅的解决方案。
然而,我仍然想知道为什么LinearLayout
中的简单外边距在ScrollView
中不起作用,因为如果它不在ScrollView
中,则能够正常工作。
有人知道原因吗?
LinearLayout
的高度设置为wrap_content
,并且所有子元素的高度都设置为match_parent
,则子元素实际上将是fill_parent
,这是来自ScrollView
的值,而不是直接父元素LinearLayout
的值wrap_content
。如果我在另一个LinearLayout
中使用一个LinearLayout
,则不会出现此问题。所以我猜测ScrollView
还有更多我们不知道的东西! - rfgamaralandroid:fillViewport="false"
不会强制LinearLayout
成为fill_parent
,就是这样。所以它不应该被拉伸,子元素也不应该被拉伸。 - Knickedi