繁体   English   中英

以编程方式将视图添加到以编程方式生成的视图

[英]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_widthlayout_height属性。 TableRow始终将这些值分别强制为ViewGroup+LayoutParams.MatchParentViewGroup+LayoutParams.WrapContent

即使是在谈论XML布局,这也适用于用代码创建的布局。

因此,首先,您需要定义ImageView单元格的高度。 通常,您将使用SetImageResource或类似的方法来确保定义了图像视图的src属性(注意: 不是背景)。

第二,删除此行:

cell.LayoutParameters = new ViewGroup.LayoutParams(75, 75);

经过这两项更改后,您的代码应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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