Ich habe ein Rechteck, in das ich Text schreiben möchte. Ich möchte, dass der Text vertikal und horizontal zentriert ist, und ich muss die Textgröße ändern, um alle Zeichen innerhalb des Rechtecks anzupassen. Hier ist mein Code:Text in Rect zentrieren und autosieren
@Override
public void drawFixedText(String text, Rect rect, Paint paint) {
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
int cX = rect.left;
int cY = rect.top;
float textSize = paint.getTextSize();
paint.setTextSize(textSize);
float textWidth = paint.measureText(text);
while (textWidth > rect.width()) {
textSize--;
paint.setTextSize(textSize);
}
//if cX and cY are the origin coordinates of the your rectangle
//cX-(textWidth/2) = The x-coordinate of the origin of the text being drawn
//cY+(textSize/2) = The y-coordinate of the origin of the text being drawn
canvas.drawText(text, cX-(textWidth/2), cY+(textSize/2), paint);
}
Ich habe versucht, die Antworten von Calculate text size according to width of text area und Android draw text into rectangle on center and crop it if needed
zu kombinieren, aber es hat nicht funktioniert, dass der Text auf der linken Seite des Rechtecks platziert wird, anstatt im Inneren. Wie kann ich das beheben?
'cX' ist die linke Seite von' Rect', also wollen Sie nicht die Hälfte der Textbreite davon subtrahieren. Sie wollen es vielmehr vom horizontalen Mittelpunkt des 'Rect' subtrahieren; h. "rect.centerX() - (textWidth/2)". Außerdem müssen Sie die Textbreite jedes Mal nach dem Ändern der Größe messen. das heißt, "textWidth = paint.measureText (text);" sollte auch nach dem 'setTextSize()' Aufruf in der Schleife sein. –
Ok, ich tat das und es hat den Text scheinbar über die linke obere Ecke des Rechtecks verschoben –
Uh, nein, das ist, wo es mit dem Code wäre, den du gepostet hast. Wenn Sie die X-Koordinate wie vorgeschlagen ändern, sollte der Text auf der Oberseite des 'Rect' zentriert sein. Stellen Sie sicher, dass Ihr Build auf dem neuesten Stand ist. Das heißt, sauber und nach den Änderungen neu erstellen. Außerdem habe ich gerade bemerkt, dass Sie es auch vertikal zentrieren wollen, also müssen Sie etwas Ähnliches für die Y-Koordinate tun, obwohl die Textgröße es nicht genau zentriert, wenn das ein Problem ist. –