[英]Programmatically add views to a programmatically generated view
我正在尝试以编程方式填充TableView,以便有4个ImageView的10个TableRows。 但是,当我尝试将ImageViews添加到动态生成的TableRows时,应用程序中什么也没有显示。
我还需要将每个ImageView存储在数组中以供以后访问,或者至少为所述数组中的每个ImageView存储某种唯一的ID。
我的代码如下(在MainActivity中):
TableView table = FindViewById<TableLayout>(Resource.Id.tableLayout1);
for(int i = 0; i < 40; i += 4)
{
TableRow row = new TableRow(this);
row.SetGravity(GravityFlags.Center);
for (short j = 0; j < 4; j++)
{
ImageView cell = new ImageView(this);
cell.LayoutParameters = new ViewGroup.LayoutParams(75, 75);
grid[i + j] = cell
row.AddView(cell);
}
table.AddView(row);
}
您的代码中存在两个问题,这都源于TableRow
中的单元格具有关于其宽度和高度的唯一规则这一事实。 从文档中:
TableRow
的子级不需要在XML文件中指定layout_width
和layout_height
属性。TableRow
始终将这些值分别强制为ViewGroup+LayoutParams.MatchParent
和ViewGroup+LayoutParams.WrapContent
。
即使是在谈论XML布局,这也适用于用代码创建的布局。
因此,首先,您需要定义ImageView
单元格的高度。 通常,您将使用SetImageResource
或类似的方法来确保定义了图像视图的src
属性(注意: 不是背景)。
第二,删除此行:
cell.LayoutParameters = new ViewGroup.LayoutParams(75, 75);
经过这两项更改后,您的代码应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.