モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

<mini> Xamarin.iOS / UWP 環境で Microcharts のラベルに日本語フォントを使用する

 汚いですがとりあえずハードコードで;;

 macOS, UWP, Android ももしかすると日本語ダメだった場合もうちょっと丁寧に書き直します;;

github.com

 以下のコードは MIT ライセンスで自由に利用可能です。

 CanvasExtensions に以下のメソッドを追加

private static SKTypeface GetTypeface(string label)
{
  SKTypeface typeface;
  if (CultureInfo.CurrentUICulture.Name == "ja-JP")
    typeface = SKFontManager.Default.MatchCharacter("HiraginoSans", label[0]);
  else if (CultureInfo.CurrentUICulture.Name == "zh-CN")
    typeface = SKFontManager.Default.MatchCharacter("PingFangSC", label[0]);
  else if (CultureInfo.CurrentUICulture.Name == "zh-HK")
    typeface = SKFontManager.Default.MatchCharacter("PingFangHK", label[0]);
  else if (CultureInfo.CurrentUICulture.Name == "zh-TW")
    typeface = SKFontManager.Default.MatchCharacter("PingFangTC", label[0]);
  else
    typeface = SKFontManager.Default.MatchCharacter(".SFUIText-Regular", label[0]);
  return typeface;
}

UWP 版は次の通り。

private static SKTypeface GetTypeface(string label)
{
  SKTypeface typeface;
  if (CultureInfo.CurrentUICulture.Name == "ja-JP")
    typeface = SKFontManager.Default.MatchCharacter("Yu Gothic UI", label[0]);
  else if (CultureInfo.CurrentUICulture.Name == "zh-CN")
    typeface = SKFontManager.Default.MatchCharacter("MS YaHei UI", label[0]);
  else if (CultureInfo.CurrentUICulture.Name == "zh-HK")
    typeface = SKFontManager.Default.MatchCharacter("MS JhengHei UI", label[0]);
  else if (CultureInfo.CurrentUICulture.Name == "zh-TW")
    typeface = SKFontManager.Default.MatchCharacter("MS JhengHei UI", label[0]);
  else
    typeface = SKFontManager.Default.MatchCharacter("Segoe UI", label[0]);
  return typeface;
}

 Label 描画部分にフォントをロードするように変更。

using (var paint = new SKPaint()
{
  TextSize = textSize,
  IsAntialias = true,
  Color = labelColor,
  IsStroke = false,
  TextAlign = horizontalAlignment,
  Typeface = GetTypeface(label),
})