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

时间:2018-02-16 16:15:32

标签: c# android xamarin xamarin.android

我正在尝试以编程方式填充TableView,以便有10个TableRows包含4个ImageView。但是,当我尝试将ImageView添加到动态生成的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);
}

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题,这两个问题源于TableRow中的单元格具有关于其宽度和高度的唯一规则。来自文档:

  

TableRow的孩子不需要在XML文件中指定layout_widthlayout_height属性。 TableRow始终将这些值分别强制为ViewGroup+LayoutParams.MatchParentViewGroup+LayoutParams.WrapContent

即使它在讨论XML布局,对于在代码中创建的布局也是如此。

首先,您需要一些东西来定义ImageView单元格的高度。通常,您使用SetImageResource或类似内容来确保定义了图片视图的src属性(注意:背景)。

其次,删除这一行:

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

在这两个更改之后,您的代码应该可以正常工作。