Tiếp tục cải thiện cả câu trả lời của cả Dee và FrinkTheBrave. Tôi đã thêm một Rect vào phương thức để cho phép vẽ trong phạm vi chiều rộng cụ thể. Sẽ xem xét sửa đổi nó để chọn một kích thước phông chữ thích hợp và đảm bảo nó phù hợp trong khu vực chiều cao chính xác.
Điều này sẽ cho phép bạn chỉ định chiều rộng của các dòng bạn muốn viết rất hữu ích để chia nhỏ chuỗi văn bản chưa được định dạng thành các dòng có độ dài tương tự và vẽ chúng vào canvas.
private void drawMultilineText(String str, int x, int y, Paint paint, Canvas canvas, int fontSize, Rect drawSpace) {
int lineHeight = 0;
int yoffset = 0;
String[] lines = str.split(" ");
// set height of each line (height of text + 20%)
lineHeight = (int) (calculateHeightFromFontSize(str, fontSize) * 1.2);
// draw each line
String line = "";
for (int i = 0; i < lines.length; ++i) {
if(calculateWidthFromFontSize(line + " " + lines[i], fontSize) <= drawSpace.width()){
line = line + " " + lines[i];
}else{
canvas.drawText(line, x, y + yoffset, paint);
yoffset = yoffset + lineHeight;
line = lines[i];
}
}
canvas.drawText(line, x, y + yoffset, paint);
}
private int calculateWidthFromFontSize(String testString, int currentSize)
{
Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextSize(currentSize);
paint.getTextBounds(testString, 0, testString.length(), bounds);
return (int) Math.ceil(bounds.width());
}
private int calculateHeightFromFontSize(String testString, int currentSize)
{
Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTextSize(currentSize);
paint.getTextBounds(testString, 0, testString.length(), bounds);
return (int) Math.ceil(bounds.height());
}
Câu trả lời này bao gồm đoạn mã này xuất sắc tìm thấy ở đây trong một câu trả lời trước bởi user850688 https://stackoverflow.com/a/11353080/1759409
Nguồn
2013-02-26 15:19:21
nhờ. Tôi không biết nó doesn0t hỗ trợ newline. thats thực sự gây phiền nhiễu. những gì bạn có nghĩa là với dải newline? – RoflcoptrException
Sử dụng String.replace() để thay thế tất cả các phiên bản của "\ n" bằng "" (một chuỗi rỗng). –
ah có đó không phải là vấn đề, mã ở trên là tình huống duy nhất mà tôi cần nó;) và như bạn có thể nhìn thấy nó thêm "\ n" bởi bản thân mình – RoflcoptrException