7

我的应用程序面临一个严重的问题,该应用程序发布在 Google Play 上,显然在除 > 4.0 之外的所有版本的 Android 上都可以正常工作。

这是我的 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" />
4

3 回答 3

14

经过大量谷歌搜索后,我回答了我自己的问题......

诀窍在于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

我希望它可以帮助别人。

文本尚未呈现最佳状态:

在此处输入图像描述

已编辑(2013 年 14 月 1 日)

我仍然面临一个 kering 问题(仅在 4.2.1 上)。请在此处查看我的另一个问题:

Android 4.2.1 错误的字距调整(间距)

已编辑(2013 年 5 月 2 日)

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

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

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

已编辑(2013 年 2 月 20 日)

找到了一个不使用的解决方法setLinearText(true),看这里:

Android 4.2.1 错误的字距调整(间距)

于 2012-12-20T11:53:33.023 回答
1

Android 4 默认开启硬件加速。启用此选项后,某些绘图功能无法正常工作。不记得究竟是哪些,但尝试在清单文件中关闭硬件加速,看看它是否有所作为。

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

于 2012-12-18T21:39:56.870 回答
1

我有一个类似的问题,试图用自定义字母间距制作一个视图,所以我只做了这两种方法,希望有人觉得它们有帮助。

/**
 * 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 );
}
于 2014-10-09T00:45:23.047 回答