ttlog

日々の開発で得た知見の技術メモ。モバイルアプリネタが多いです。

Android(Xamarin) 文字列の横幅取得方法

Androidにおける文字列の横幅(dp)を取得する方法のメモです。 親Layoutの横幅と比較して、1行に何文字表示出来るか等の計算が出来たりします。

現在Xamarinで開発中のため、コードもXamarin(C#)になってしまっていますが、Android Nativeでも書き方はそう変わらないかと思います。

文字列のサイズ取得

TextViewクラスから取得出来るPaintオブジェクトを使い、MeasureText()を呼び出します。

measureText)

using Android.App;
using Android.Content.Res;
using Android.Util;
using Android.Widget;

namespace XXX
{
    public class StringWidthCalculator
    {
        public double CalculateStringWidth(string str, double fontSize)
        {
            var textView = new TextView(Application.Context);
            textView.SetTextSize(ComplexUnitType.Sp, (float)fontSize);
            var widthOfPixel = textView.Paint.MeasureText(str);
            return widthOfPixel / Resources.System.DisplayMetrics.Density;
        }
    }
}

TextViewにフォントサイズを設定しておくことでフォントサイズに応じた文字列のサイズが取得出来るようです。 ComplexUnitType.Spとしているため、ユーザのフォントサイズ設定に応じて横幅が変動します。

また、MeasureText()で返却される横幅はpixel単位のため、この関数から返却する際にdpに変換しています。

使い方

var str = "abcde";
double fontSize = 13;
var calculator = new StringWidthCalculator();
var width = calculator.CalculateStringWidth(str, fontSize);

サンプルコード

github.com