我正在尝试将一些自定义框架布局动态添加到“水平滚动视图”中。我正在考虑在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>
答案 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);