简体   繁体   中英

Dynamically adding views to RelativeLayout inside ScrollView

I am trying to add dynamically created several RelativeLayouts into a LinearLayout which is inside a RelativeLayout, which is inside a ScrollView. When the total height of the all views exceed the size of the phone screen, all views are displayed correctly. But when the total size of dynamically added views is not enough for filling the screen, only the first RelativeLayout element is shown and the others are not displayed in the screen. I am really hopeless and do not understand why.

Here is the code to dynamically populate views inside linear layout:

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);
}

Here is list_item_comment.xml:

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

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

And here is the xml file for this activity:

<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/main_layout"
>
...

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

        <RelativeLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/relativeContainer"
        >

        ...

            <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/comments_layout"
            />

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>

And the screenshots:

Without sufficient layouts: (INCORRECT, needs to show 3 comments)

不正确的一个

With enough layouts: (CORRECT ONE, screen is filled)

正确一个

I just need to show all three comments in the first case:/ Thanks in advance.

instead of fill_parent , try changing the layout_height of the <RelativeLayout> of your list_item_comment.xml to wrap_content .

Also, why do you need another <RelativeLayout> inside your <ScrollView> of the xml of your activity. The LinearLayout is sufficient to do what you want your activity to look like. Maybe you can just remove it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM