Canvas上的Android文本大小与TextView中的文本大小不同

时间:2013-04-19 11:15:59

标签: android textview surfaceview

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

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

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

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

最好的问候

1 个答案:

答案 0 :(得分:7)

你必须在android中使用设备无关的像素(dp / dip)才能在所有设备上获得相同的大小。在Text的情况下,存在与比例无关的像素(sp)。详细了解这些以便更好地理解。

  

要将Pixel值转换为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;

}

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