我试图以类似拼字游戏的word game app在黄色图块上绘制黑色字母和值。

在Windows和Mac下的Android模拟器上可以使用此功能时:



在Moto G,Nexus 1和4等真实设备上,这不起作用(文本大小太大):

我在dp中定义了 60sp 20sp 的文本大小(我也尝试过res/values/dimens.xml):

<resources>
    <dimen name="big_tile_letter">60sp</dimen>
    <dimen name="big_tile_value">20sp</dimen>
</resources>

然后在我的BigTile.java类中使用它们:
    int letterSize = context.getResources().getDimensionPixelSize(R.dimen.big_tile_letter);
    mLetterPaint = new Paint();
    mLetterPaint.setTextSize(letterSize);
    mLetterPaint.setAntiAlias(true);

    Rect letterBounds = new Rect();
    mLetterPaint.getTextBounds(letter, 0, letter.length(), letterBounds);
    mLetterX = 0.45f * (width - letterBounds.width());
    mLetterY = 0.45f * (height + letterBounds.height());

    canvas.drawText(letter, mLetterX, mLetterY, mLetterPaint);

我究竟做错了什么?

最佳答案

如果您想要将的 R.dimen.something值转换为像素,请执行以下操作:

float textSize = getResources().getDimensionPixelSize(R.dimen.something);

如果您想要提供手动值或类似的值:
float maxTextSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, maxTextSize, getResources().getDisplayMetrics());

10-07 18:31