私は現在、コード生成されたレイアウトで少し遊んでいます。そこで、コードのこの部分に問題があることを認識しました。
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 をスケーリングします。これを別の方法でも達成できますか?