0

我想将棋盘图像绘制到RelativeLayout 的背景中。

我正在纵向模式(垂直)下对此进行测试。

这是我的一段代码:

device_xdpi = getResources().getDisplayMetrics().xdpi;
device_ydpi = getResources().getDisplayMetrics().ydpi;

我想做的是:取较短边缘(纵向模式下的上边缘)的 dpi 大小并使RelativeLayout 的高度等于它。

我正在尝试这个:

chessBoardLayout = (RelativeLayout) findViewById(R.id.chessBoardLayout);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int) device_xdpi);
            chessBoardLayout.setLayoutParams(params);

但它不起作用。

如何将 device_xdpi 转换为正确的 dp ?

4

2 回答 2

1

由于 device_xdpi 以像素为单位,这应该可以

public static int convertPixelsToDp(float px, Context context){
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    int dp = (int)(px / (metrics.densityDpi / 160f));
    return dp;
}
于 2013-07-26T17:09:14.637 回答
1

您使用的构造函数需要像素,而不是 dp。也就是说,您无需任何 dp/像素转换即可获得最短边的大小:

  • MATCH_PARENT在 XML 中设置布局的两个维度。
  • 测量后在您的 RelativeLayout 上使用getWidth()getHeight()
  • 获取两者中较小的一个并在新的 LayoutParams 中设置宽度/高度
于 2013-07-26T17:14:36.717 回答