我尝试以编程方式将一些 GUI 元素(如 ImageView 或 TextView)添加到 LinearLayout。但不显示元素。
为了查看一个元素是否被绘制,我为每个元素设置了不同的背景颜色。结果我只能看到LinearLayout的背景色。但为什么?
public class MyLinearLayout extends LinearLayout {
public MyLinearLayout(Context context) {
super(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
setLayoutParams(params);
setBackgroundColor(Color.RED);
imageView = new ImageView(context);
params = new LinearLayout.LayoutParams(100, 100);
imageView.setLayoutParams(params);
imageView.setBackgroundColor(Color.BLUE);
addView(imageView);
}
}
奇怪的是,我可以看到 LinearLayout 的红色背景颜色,但在 ImageView 的大小中。如果我添加一些其他 GUI 元素,如 TextView,我可以看到 LinearLayout 是如何增长的。但我看不到TextView。
我真的很困惑,因为这不是我第一次做这样的事情。你能告诉我我做错了什么吗?
这是 layout.xml 文件的片段:
<LinearLayout android:layout_width="match_parent"
android:layout_height="45dp"
android:id="@+id/bottom_bar"
android:layout_alignParentBottom="true"
android:gravity="bottom">
<FrameLayout android:id="@+id/block_edit_delete_layout"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:background="@drawable/block_edit_delete_selector">
<ImageView android:layout_height="match_parent"
android:layout_width="wrap_content"
android:src="@drawable/block_edit_delete"
android:scaleType="fitXY"
android:contentDescription="@string/delete"/>
</FrameLayout>
<LinearLayout
android:id="@+id/block_edit_progress"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal"/>
<FrameLayout android:id="@+id/block_edit_random_layout"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:background="@drawable/block_edit_delete_selector">
<ImageView android:layout_height="match_parent"
android:layout_width="wrap_content"
android:src="@drawable/block_edit_random"
android:scaleType="fitXY"
android:contentDescription="@string/random_numbers"/>
</FrameLayout>
</LinearLayout>
带有 ID 的 LinearLayoutblock_edit_progress
是类的多个实例的容器布局MyLinearLayout
。在代码中添加实例:
for(int i = 0; i < numberOfMyLinearLayouts; i++) {
MyLinearLayout v = new MyLinearLayout(getContext());
addView(v);
}
我希望这有帮助。