5

我有一个 SurfaceView 和 TextView,我在其上绘制文本

Paint p = new Paint();
p.p.setTextSize(14);
canvas.drawText(....
TextView  text =...
text.setTextSize(14);

在某些设备上,两个文本看起来完全一样。但在模拟器和三星 Galaxy III 上,画布上的文本要小两倍。为什么?如何在所有设备上获得相同的尺寸?

SurfaceView 和 TextView 同时出现在屏幕上。TextView 位于几个 Layers 上,并覆盖在 SurcafeView 的 Canvas 上。

此致

4

1 回答 1

7

您必须在 android 中使用与设备无关的像素(dp/dip)才能在所有设备上获得相同的尺寸。如果是文本,则存在与比例无关的像素(sp)。查看更多关于这些的信息以便更好地理解。

要将像素值转换为 dp,请使用以下代码:

public static float convertPixelsToDp(float px,Context context){

  DisplayMetrics metrics = context.getResources().getDisplayMetrics();
  float dp = px / (metrics.densityDpi / 160f);
  return dp;

}

要将 dp 值转换为像素,请使用以下代码:

public static float convertDpToPixel(float dp,Context context){

  DisplayMetrics metrics = context.getResources().getDisplayMetrics();
  float px = dp * (metrics.densityDpi/160f);
  return px;

}

只需根据您的要求调用您想要的任何方法。

于 2013-04-19T11:25:03.880 回答