我遇到了由包含 LinearLayout 的 ScrollView 组成的 Fragment 的问题。我正在尝试创建一种效果,其中 LinearLayout 具有白色背景,看起来像一张在彩色背景上滚动的纸。我试图实现这一点的方法是让 ScrollView 占据片段的全部空间,然后内部的 LinearLayout 必须android:layout_margin="16dp"
在“纸张”周围创建空间。
这样,ScrollView 的滚动条就会出现在彩色背景区域中,顶部的边距会随着内容滚动而离开,而底部的边距只有在到达末尾时才会滚动。
不幸的是,在这种配置中,ScrollView 不会一直滚动到最后,实际上会截断底部的一小部分文本。我怀疑 ScrollView 没有考虑其子级在其垂直滚动距离中的边距。为了解决这个问题,我将 LinearLayout 包装在 FrameLayout 中,这解决了这个问题,但似乎是多余的。任何有关如何消除这个不需要的容器的指针都将不胜感激。
注意:android:padding="16dp"
在 ScrollView 上设置并取消边距不会产生预期的效果,因为无论滚动位置如何,填充都会连续出现在所有四个边缘上。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
tools:context=".ArticleFragment" >
<!-- This FrameLayout exists purely to force the outer ScrollView to respect
the margins of the LinearLayout -->
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="10dp"
android:layout_margin="16dp"
android:background="@color/page_background" >
<TextView
android:id="@+id/article_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textIsSelectable="true" />
<TextView
android:id="@+id/article_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true" />
</LinearLayout>
</FrameLayout>
</ScrollView>