Xamarin.Android でアイコンフォントを使う

アイコンフォントを Xamarin.Android プロジェクトに組み込む

  1. Assets フォルダにアイコンフォントのファイル(.ttf)を追加。
    • Assets 直下ではなく fonts フォルダを作って、その下に追加してもいい。
  2. 追加したファイルのビルドアクションを AndroidAsset にする。

Bitmap に変換して使う

アイコンフォントを Bitmap に変換するメソッドを用意しておく。

using Android.Content;
using Android.Graphics;
using Android.Util;

public static class BitmapEx
{
    public static Bitmap FromFontAsset(
        Context context,
        string path,
        string glyph,
        float size,
        Color color)
    {
        var paint = new Paint
        {
            TextSize = TypedValue.ApplyDimension(
                ComplexUnitType.Dip,
                size,
                context.Resources.DisplayMetrics),
            Color = color,
            TextAlign = Paint.Align.Left,
            AntiAlias = true,
        };

        var typeface = Typeface.CreateFromAsset(context.Assets, path);
        paint.SetTypeface(typeface);

        var width = (int)(paint.MeasureText(glyph) + .5f);
        var baseline = (int)(-paint.Ascent() + .5f);
        var height = (int)(baseline + paint.Descent() + .5f);

        var image = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888);
        var canvas = new Canvas(image);
        canvas.DrawText(glyph, 0, baseline, paint);

        return image;
    }
}

ImageView とかに表示するには画像に変換してやる必要があるので、このメソッドを使う。

var bitmap = BitmapEx.FromFontAsset(
    context: Context,
    path: "Assets を起点にしたアイコンフォントファイルの相対パス",
    glyph: "アイコンの Unicode",
    size: 20,
    color: Android.Graphics.Color.White);
imageView.SetImageBitmap(bitmap);