【问题标题】:Android text size on Canvas differ from text size in TextViewCanvas 上的 Android 文本大小与 TextView 中的文本大小不同
【发布时间】:2013-04-19 11:15:59
【问题描述】:

我有一个 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 上。

最好的问候

【问题讨论】:

  • 这可能是因为 P.setTextSize(float s) 以 px 为单位,而 textView.setTextSize() 以 dp 为单位。并且对于不同的设备 px 和 dp 可能不同
  • 是的,你是对的!谢谢你的回复!!

标签: android textview surfaceview


【解决方案1】:

您必须在 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 上获得相同大小的文本?
  • 那是因为每个设备有不同的分辨率,ppi值。只需将像素值传递给上述方法即可将它们转换为 dp。例如: p.p.setTextSize(convertPixelsToDp(14,YourActivity.this));
  • 谢谢。我没有尝试过您的解决方案,但看起来也不错。
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2017-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多