我试图以类似拼字游戏的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());