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

5

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

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

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

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

此致敬礼。


4
可能是因为P.setTextSize(float s)使用像素(px)作为大小单位,而textView.setTextSize()使用设备独立像素(dp)作为单位。不同设备上的px和dp可能会有所不同。 - umesh
是的,你说得对!谢谢你的回复!! - Ekaterina Ivanova iceja.net
1个回答

8

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

}

只需调用您需要的任何方法。


我不想在所有设备上都使用相同大小的文本。问题是如何在Canvas和TextView上获得相同大小的文本。对于某些设备,这需要很少的努力,但对于另一些设备,这些大小是不同的。如何在同一设备上在Canvas和TextView上获得相同大小的文本? - Ekaterina Ivanova iceja.net
1
这是因为每个设备都有不同的分辨率和ppi值。只需将像素值传递给上述方法,即可将它们转换为dp。例如:p.p.setTextSize(convertPixelsToDp(14,YourActivity.this)); - SKK
谢谢。我还没有尝试过你的解决方案,但它看起来也不错。 - Ekaterina Ivanova iceja.net

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接