0

我目前正在玩一些代码生成的布局。我在这部分代码中发现了一个问题:

dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int dp_x = (dm.widthPixels - 32) / 10;

for(int x = 0; x < 9; x++) {
    TableRow tr = new TableRow(this);
    tr.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
                                        LayoutParams.WRAP_CONTENT));
    for(int y = 0; y < 9; y++) {
        ImageView i = new ImageView(this);
        i.setClickable(true);
        i.setLayoutParams(new LayoutParams(dp_x, dp_x));
        i.setScaleType(ScaleType.FIT_XY);
        i.setImageDrawable(getResources().getDrawable(R.drawable.i0));
        iv[x][y] = i;
        tr.addView(iv[x][y]);
    }
    fieldLayout.addView(tr);
}

尤其是这条线似乎导致了问题:

i.setLayoutParams(new LayoutParams(dp_x, dp_x));

当这一行被注释掉时,一切都会正确显示。但是,一旦我取消注释它,就不会显示任何一个 ImageView。我查看了调试,每个值似乎都正确添加到 ImageView。任何想法,是什么导致这个错误?

另一件事是 - 我知道 DisplayMetrics 和它们的宽度/高度不鼓励使用。在这里,我使用它来根据显示缩放 ImageView。我也可以通过其他方式实现这一目标吗?

4

1 回答 1

1

假设您的dp_xdp_y值是正确的:

TableRow.LayoutParams layoutParams = new TableRow.LayoutParams(dp_x, dp_y);
i.setLayoutParams(layoutParams);

似乎它没有改变任何东西,但它对我有用!可能是因为 LayoutParams 更具体(TableRow .LayoutParams)

希望这可以帮助 !

于 2013-07-09T06:46:42.280 回答