动态地将框架布局添加到水平滚动视图

时间:2018-10-22 13:42:55

标签: android android-layout

我正在尝试将一些自定义框架布局动态添加到“水平滚动视图”中。我正在考虑在xml中使用嵌套的线性布局创建水平滚动视图,并使用Java添加一些框架布局。像这样:

LinearLayout parent = (LinearLayout) findViewById(R.id.parent);
for(int i=0; i<5; i++) {
    FrameLayout child = new FrameLayout(this);
    child.setBackgroundResource(R.drawable.card);
    //add this linear layout to the parent
}

我已经看到一些使用Layout Inflater的解决方案,但是据我了解,该解决方案使用了我资源中的布局。相反,如果可能的话,我想创建不带xml的框架布局。

谢谢

编辑:

这是我的xml

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@android:color/holo_blue_light">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/parent"
        android:orientation="horizontal">

    </LinearLayout>

</HorizontalScrollView>

1 个答案:

答案 0 :(得分:0)

假设您有以下代码:

FrameLayout child = new FrameLayout(this);
child.setBackgroundResource(R.drawable.card);
parent.addView(child);

由于尚未为此视图指定任何LayoutParams,因此LinearLayout将为您生成默认的LayoutParams。这样做是这样的:

@Override
protected LayoutParams generateDefaultLayoutParams() {
    if (mOrientation == HORIZONTAL) {
        return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    } else if (mOrientation == VERTICAL) {
        return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    }
    return null;
}

您的LinearLayout是水平的,因此两个尺寸都将使用WRAP_CONTENT。但是您的FrameLayout没有任何内容,因此与0相同。

您可以通过如下更改代码来手动指定LayoutParams(使用像素尺寸):

FrameLayout child = new FrameLayout(this);
child.setBackgroundResource(R.drawable.card);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(200, 200); // px units
child.setLayoutParams(params);

parent.addView(child);

或者,您可以将内容添加到FrameLayout以便为其包装:

FrameLayout child = new FrameLayout(this);
child.setBackgroundResource(R.drawable.card);

TextView tv = new TextView(this);
tv.setText("hello world");
child.addView(tv);

parent.addView(child);