Canvas.drawText中的双转义百分比符号(%)

时间:2018-11-26 02:37:10

标签: java android

有人知道为什么当我试图对浮点值进行字符串格式化以在画布上绘制时为什么必须对百分号(%)进行两次转义吗?请参阅下面的相关代码行...

float mValue = .25F;    
String percent = String.format(Locale.getDefault(), "%.0f%%%%", mValue * 100);
canvas.drawText(percent, 0, percent.length() - 1, posX, posY, mTextPaint);

这将在视图画布上呈现25%。如果我尝试以下字符串格式...

String percent = String.format(Locale.getDefault(), "%.0f%%", mValue * 100);

它将仅呈现25而没有百分比符号。有什么明显的我想念的地方吗? 我正在API等级27的仿真器上运行此程序,并使用API​​等级28进行编译

2 个答案:

答案 0 :(得分:2)

我最好的选择是.drawText()截断字符串中的最后一个字符。就像当我尝试格式化百分比时,它的末尾实际上有“ %%”。

请尝试使用下面没有字符串范围的代码来绘制全文,并查看其是否被截断。

canvas.drawText(percent, posX, posY, mTextPaint);

答案 1 :(得分:1)

很奇怪,文档中提到end参数为stringlength-1

  
      
  • @param end(end-1)是要绘制的文本中最后一个字符的索引
  •   

但是查看在BaseCanvas中省略了开始/结束参数的函数的源代码,他们将string.length()用作结束参数。

exportExcelFile(workbookPassengerByTime, "Excel_No.1" + ".xlsx");
exportExcelFile(workbookSummaryLogs, "Excel_No.2" + ".xlsx");

看来这只是在修剪你的最后一个角色,伙计。删除“-1”,或仅使用忽略开始/结束参数的函数,如下所示:

public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint) {
...
    nDrawText(mNativeCanvasWrapper, text, 0, text.length(), x, y, paint.mBidiFlags,
                paint.getNativeInstance(), paint.mNativeTypeface);
}