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));

この行をコメントアウトすると、すべてが正しく表示されます。しかし、コメントを外すとすぐに、ImageViews が 1 つも表示されません。デバッグを調べたところ、すべての値が ImageView に正しく追加されているようです。このエラーの原因は何ですか?

もう 1 つは、DisplayMetrics とその幅/高さを使用しないことを知っています。ここでは、これを使用して、ディスプレイに応じて ImageView をスケーリングします。これを別の方法でも達成できますか?

4

1 に答える 1

1

dp_xあなたとdp_y値が正しいと仮定すると:

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

何も変わらないようですが、私にとってはうまくいきました!おそらく、LayoutParams がより具体的であるためです ( TableRow .LayoutParams)

お役に立てれば !

于 2013-07-09T06:46:42.280 に答える