Nexus 7上的Android 4.2:canvas.drawText()无法正常工作

我在Google Play上发布的应用程序面临严重的问题,显然在所有版本的Android上工作都很好,除了4.0以外。

这是我的Android 4.0 HTC手机的屏幕截图:

在这里输入图像说明

这就是我在Nexus 7上获得的Android 4.2.1(在模拟器中的相同行为):

在这里输入图像说明

我看到使用canvas.drawText()绘制每个文本的相同行为

用于绘制文本的Paint是:

 paint = new Paint(); paint.setAntiAlias(true); paint.setColor(color); //some color paint.setTextSize(size); //some size paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); paint.setTextAlign(Align.CENTER); 

在logCat(4.2.1模拟器)中我看到很多

 12-18 20:42:21.096: W/Trace(276): Unexpected value from nativeGetEnabledTags: 0 

我在清单中使用这些设置:

  <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> 

Solutions Collecting From Web of "Nexus 7上的Android 4.2:canvas.drawText()无法正常工作"

我回答了我自己的问题后,大量的谷歌search…

技巧在于使用setLinearText(true)来绘制文本的Paint对象。 现在,一切看起来都很棒。

 paint = new Paint(); paint.setAntiAlias(true); paint.setColor(color); paint.setTextSize(size); paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); paint.setTextAlign(Align.CENTER); paint.setLinearText(true); 

这里节省了我的一天的链接:

http://gc.codehum.com/p/android/issues/detail?id=39755

我希望它可以帮助一些。

文本不是最好的:

在这里输入图像说明

编辑(14/01/2013)

我仍然面临一个问题(只在4.2.1)。 请在这里看到我的其他问题:

Android 4.2.1错字字距(间距)

编辑(05/02/2013)

我看到另一个项目也有同样的问题。 看看下面的链接:

http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/

如果你在Nexus 4.2.1(或在模拟器Android 4.2)上运行示例,你会得到相同的“奇怪的”文本…

编辑(20/02/2013)

find一个解决方法,不使用setLinearText(true) ,看这里:

Android 4.2.1错字字距(间距)

我有一个类似的问题,试图使用自定义字母间距的视图,所以我只是做了这2种方法,希望有人发现他们有帮助。

 /** * Draws a text in the canvas with spacing between each letter. * Basically what this method does is it split's the given text into individual letters * and draws each letter independently using Canvas.drawText with a separation of * {@code spacingX} between each letter. * @param canvas the canvas where the text will be drawn * @param text the text what will be drawn * @param left the left position of the text * @param top the top position of the text * @param paint holds styling information for the text * @param spacingPx the number of pixels between each letter that will be drawn */ public static void drawSpacedText(Canvas canvas, String text, float left, float top, Paint paint, float spacingPx){ float currentLeft = left; for (int i = 0; i < text.length(); i++) { String c = text.charAt(i)+""; canvas.drawText(c, currentLeft, top, paint); currentLeft += spacingPx; currentLeft += paint.measureText(c); } } /** * returns the width of a text drawn by drawSpacedText */ public static float getSpacedTextWidth(Paint paint, String text, float spacingX){ return paint.measureText(text) + spacingX * ( text.length() - 1 ); } 

Android 4默认为硬件加速。 一些绘图function不能正常工作。 无法完全记住哪些,但是尝试closures清单文件中的硬件加速,看看它是否有所作为。

当然这可能不是原因,但值得一试。