将视图动态添加到 ScrollView 内的 RelativeLayout

Posted

技术标签:

【中文标题】将视图动态添加到 ScrollView 内的 RelativeLayout【英文标题】:Dynamically adding views to RelativeLayout inside ScrollView 【发布时间】:2012-04-17 16:34:23 【问题描述】:

我正在尝试将动态创建的几个RelativeLayouts 添加到一个LinearLayout 中,该LinearLayout 在一个RelativeLayout 内,它位于一个ScrollView 内。当所有视图的总高度超过手机屏幕的大小时,所有视图都正确显示。但是当动态添加的视图的总大小不足以填满屏幕时,只会显示第一个 RelativeLayout 元素,而其他元素则不会显示在屏幕中。我真的很绝望,不明白为什么。

这是在线性布局中动态填充视图的代码:

LinearLayout commentsLayout = (LinearLayout) findViewById(R.id.comments_layout);

LayoutInflater inflater = (LayoutInflater)
    this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

for(Comment c: commentsList) 

    RelativeLayout layoutItem = (RelativeLayout) inflater.inflate(
        R.layout.list_item_comment, null, false);

        TextView tv = (TextView) layoutItem.findViewById(R.id.textView);
        ImageView iv = (ImageView) layoutItem.findViewById(R.id.imageView);

        // set tv's text
        // set iv's image and onclicklistener, nothing fancy here, everything goes well

        commentsLayout.addView(layoutItem);

这里是 list_item_comment.xml:

<RelativeLayout
android:orientation="vertical"
android:layout_
android:layout_
android:background="@color/white"
>
    <ImageView 
    android:id="@+id/imageView"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_marginTop="10dp"
    android:layout_marginLeft="10dp"
    />

    <TextView 
    android:id="@+id/textView"
    android:layout_
    android:layout_
    android:layout_margin="10dp"
    android:textSize="16sp"
    android:layout_toRightOf="@id/imageView"
    />
</RelativeLayout>

这里是这个活动的 xml 文件:

<RelativeLayout
android:orientation="vertical"
android:layout_
android:layout_
android:id="@+id/main_layout"
>
...

    <ScrollView
    android:orientation="vertical"
    android:layout_
    android:layout_
    android:fillViewport="true"
    android:id="@+id/scrollView"
    >

        <RelativeLayout
        android:orientation="vertical"
        android:layout_
        android:layout_
        android:id="@+id/relativeContainer"
        >

        ...

            <LinearLayout
            android:orientation="vertical"
            android:layout_
            android:layout_
            android:id="@+id/comments_layout"
            />

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

还有截图:

没有足够的布局:(不正确,需要显示 3 个 cmets)

有足够的布局:(正确的一个,屏幕已填满)

我只需要在第一种情况下显示所有三个 cmets:/ 提前致谢。

【问题讨论】:

为什么不使用带有页眉和页脚的 ListView? 实际上通常我在看起来像列表的视图之上还有很多其他视图:几个图像视图、按钮等,所以这不是常见的情况,但我也需要解决这种情况,因为我不能依赖这个活动中的所有其他视图都将被初始化的事实。有什么想法吗? 【参考方案1】:

尝试将&lt;RelativeLayout&gt;layout_heightlayout_height 更改为wrap_content,而不是fill_parent

另外,为什么您的活动 xml 的 &lt;ScrollView&gt; 中还需要另一个 &lt;RelativeLayout&gt;LinearLayout 足以让您的活动看起来像您想要的那样。也许您可以将其删除。

【讨论】:

我尝试了你的建议,但似乎没有解决问题:/ 实际上这不是我活动的常见情况,通常必须有一个 2 个图像视图、一个按钮、几个文本视图等,因此相对布局让我的工作更轻松。但这也是一种情况(尽管很少见),因此我应该找到解决方案:/ @ecem,你能找到解决方案吗?

以上是关于将视图动态添加到 ScrollView 内的 RelativeLayout的主要内容,如果未能解决你的问题,请参考以下文章

使用 AutoLayout 以编程方式将 UILabel 添加到 ScrollView (swift)

将元素动态加载到 ScrollView

ScrollView 在 Interface Builder 中的大小不正确

将选择器添加到动态添加的 UIScrollView 视图上的按钮

滚动视图内的约束

将滚动视图添加到 UIView