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" /> 

    Related 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清单文件中的硬件加速,看看它是否有所作为。

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