在低階 UI (Canvas) 上顯示長文本(遊戲說明、關於畫面、公告),需支援:
String[] wrapText(String text, Font font, int maxWidth),依字體度量將字串切分為行陣列。paint(Graphics g) 中迴圈繪製行陣列,計算 Y 軸位置。public String[] wrapText(String text, Font font, int maxWidth) {
Vector lines = new Vector();
int start = 0;
for (int i=0;i maxWidth) {
// 尋找最近空格或標點斷行(簡化版直接硬切)
lines.addElement(text.substring(start, i));
start = i;
}
}
lines.addElement(text.substring(start));
String[] arr = new String[lines.size()];
lines.copyInto(arr);
return arr;
}
實際專案建議整合「智慧型字串換行演算法」(參考 ID 78126)處理中英混排與單詞完整性。
class TextCanvas extends Canvas {
private String[] contentLines;
private int lineHeight;
public TextCanvas(String fullText) {
Font f = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);
contentLines = wrapText(fullText, f, getWidth()-20);
lineHeight = f.getHeight() + 2;
}
protected void paint(Graphics g) {
g.setColor(0xFFFFFF); g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0x000000);
int y = 10;
for (String line : contentLines) {
g.drawString(line, 10, y, Graphics.TOP|Graphics.LEFT);
y += lineHeight;
}
}
}
scrollOffset(首行索引),鍵盤上下鍵增減。paint 僅繪製可見範圍 contentLines[scrollOffset ... scrollOffset+visibleLines]。0 <= scrollOffset <= contentLines.length - visibleLines。getWidth() 動態取得螢幕寬度,同一套碼跑在 128×128 與 240×320 均正常。