防止 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与ListView的冲突

ScrollView 文本对齐 SwiftUI

ScrollView -> ChildView 没有调整到约束

mas 中scrollview碰到的问题。ios10.0后

如何在iphone中使用不同的数组重新加载scrollView

如何在ScrollView中嵌套ListView