private string longStr = "Xamarin 이란 C# 으로 구현된 소스를 이용하여 " +
"Android/iOS/Windows 앱을 만들수 있도록 해주는 " +
"Cross Platform 이다. 즉, C# 을 이용하여 하나의 " +
"앱을 구현하고, 이를 Xamarin 을 이용하여 각 플랫폼에 " +
"맞는 앱을 만들어내는것이다.";
이 글을 화면에 출력해 보려 합니다.
Paint pen = new Paint();
pen.Color = Color.Yellow;
pen.TextSize = 25;
canvas.DrawText(longStr, 50, 100, pen);
이와 같이 단순하게 출력해 보면 다음과 같이 나옵니다.
이 문장을 여러 줄에 걸쳐 출력하려면 어떻게 될까요?
시스템적으로 지원하지는 않는 것 같고, 일정 넓이로 잘라주는 코드를 만들어야 합니다.
이 일을 할 수 있는 것이 Android.Graphics.Paint의 메소드 BreakText()입니다.
BreakText()는 다음과 같은 형식을 가지고 있습니다.
public virtual int BreakText(string text, bool measureForwards,
float maxWidth, float[] measuredWidth);
text : 잘라야 할 긴 문자열
measureForwards : true면 앞에서 뒤로, false면 뒤에서 앞으로
maxWidth : 잘라야 할 넓이
measureWidth : null이 아닐 경우 실제 넓이 리턴(?)
return value : 잘리는 위치
private List StringDivide(Paint pen, string str, float width)
{
var rtn = new List();
int endValue = 0;
do
{
endValue = pen.BreakText(str, true, 200, null); // 자를 위치를 찾아
endValue = Math.Min(endValue, str.Length);
if (endValue > 0)
{
rtn.Add(str.Substring(0, endValue)); // 잘라내서 리스트에 추가
str = str.Substring(endValue); // 리스트에 추가된 부분을 잘라냄
}
} while (endValue > 0);
return rtn;
}
이것으로 다음과 같이 출력루틴을 바꾸면
Paint pen = new Paint();
pen.Color = Color.Yellow;
pen.TextSize = 25;
var strList = StringDivide(pen, longStr, 300);
int y = 100;
foreach (var str in strList)
{
canvas.DrawText(str, 50, y, pen);
y += 30;
}
저는 확장뷰를 사용하기에 나눠서 리스트로 만들었지만, Xamarin form을 사용할 때는 중간에 \n을 삽입하는 방식으로 해야 되겠죠.

