防止 ScrollView 占用太多高度
Posted
技术标签:
【中文标题】防止 ScrollView 占用太多高度【英文标题】:Keep ScrollView from taking up too much height 【发布时间】:2012-01-30 13:02:27 【问题描述】:我试图防止 ScrollView 在屏幕底部占用太多空间,因为它使我的两个按钮无法显示。我也不想手动设置 ScrollView 的高度。
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">
<LinearLayout
...
android:orientation="horizontal">
<Button .../>
<TextView .../>
<Button .../>
</LinearLayout>
<ScrollView
android:layout_
android:layout_>
<ImageView .../>
<ImageView .../>
<ImageView .../>
</ScrollView>
<LinearLayout
...
android:orientation="horizontal">
<Button .../>
<Button .../>
</LinearLayout>
</LinearLayout>
这是我的布局的通用版本。发生的情况是 ScrollView 一直延伸到屏幕底部,无论其中有多少项目。这会导致屏幕底部的两个按钮不可见。
如何在不手动设置 ScrollView 高度的情况下阻止这种情况发生?
我的所有观点都使用了android:layout_height="wrap_content"
。
这不是应该自动分配视图的高度以适应屏幕的高度吗?
(想要包含图片,但我的声望还不够高(-_-))
【问题讨论】:
切换到RelativeLayout 作为您的根布局可能是个好主意。它应该为您提供工具,让 ScrollView 保持在视图的中心区域内,而无需自己明确计算其高度。 感谢您的评论。从那以后,我实施了一个不同的解决方案,但在此过程中我学到了更多的东西,我相信您的实施将最适合我想做的事情。 RelativeLayout 允许我将按钮锚定到屏幕底部,然后将所有其他 UI 对象放置在屏幕顶部和按钮之间。 你的 ScrollView 应该有不超过一个孩子。不知道这是否是您的问题的原因。 【参考方案1】:我今天解决这个问题的方法是使用RelativeLayout
作为基础。将两个LinearLayout
分别锚定到 RelLayout 的顶部和底部。然后我会插入ScrollView
,但我会确保将其布局属性设置如下:
android:layout_below="topLinearLayout"
android:layout_above="bottomLinearLayout"
【讨论】:
不应该是“alignParentTop=true”(底部也一样) 是的,对于顶部 LinearLayout,您将使用alignParentTop=true
,对于底部 LinearLayout,您将使用 alignParentBottom=true
,但对于 ScrollView,我这样做的方式如上所述,换句话说,使顶部ScrollView 锚点的边缘到顶部 LinearLayout 的底部边缘,底部边缘到底部 LinearLayout 的顶部边缘。【参考方案2】:
您是否尝试过将layout_weight
用于ScrollView
。 IIRC,如果为 ONE 元素设置了非零权重(并且相应的维度设置为 0dp),那么它将在设置同级视图的测量值之后填充该维度中的剩余空间(在这种情况下,@ 987654324@ 在ScrollView
的顶部和底部。
抱歉,已经有一段时间没有要检查 Android 环境了。
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">
<LinearLayout>
...
Something at the top
...
</LinearLayout>
<ScrollView
android:layout_
**android:layout_
android:layout_weight="1"**>
<ImageView .../>
<ImageView .../>
<ImageView .../>
</ScrollView>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal" >
...
buttons
...
</LinearLayout>
</LinearLayout>
Here's an answer 提供有关 layout_weight 属性的更多信息。
【讨论】:
以上是关于防止 ScrollView 占用太多高度的主要内容,如果未能解决你的问题,请参考以下文章
ScrollView -> ChildView 没有调整到约束