フォント Xamarin.Forms

サンプルのダウンロードサンプルをダウンロードする

既定では、 Xamarin.Forms 各プラットフォームで定義されたシステム フォントを使用します。 ただし、テキストを表示するコントロールは、このフォントの変更に使用できるプロパティを定義します。

  • FontAttributes、、および Italic. の 3 つのメンバーBoldNoneを持つ列挙体である型FontAttributesです。 このプロパティの既定値は None です。
  • double 型の FontSize
  • string 型の FontFamily

これらのプロパティは、BindableProperty オブジェクトが基になっています。つまり、これらは、データ バインディングの対象にすることができ、スタイルを設定できます。

フォント属性を設定する

テキストを表示するコントロールは、フォント属性を FontAttributes 指定するようにプロパティを設定できます。

<Label Text="Italics"
       FontAttributes="Italic" />
<Label Text="Bold and italics"
       FontAttributes="Bold, Italic" />

これに相当する C# コードを次に示します。

Label label1 = new Label
{
    Text = "Italics",
    FontAttributes = FontAttributes.Italic
};

Label label2 = new Label
{
    Text = "Bold and italics",
    FontAttributes = FontAttributes.Bold | FontAttributes.Italic
};    

フォント サイズを設定する

テキストを表示するコントロールは、フォント サイズを FontSize 指定するプロパティを設定できます。 このプロパティは FontSize 、直接値に double 設定することも、列挙値を使用 NamedSize して設定することもできます。

<Label Text="Font size 24"
       FontSize="24" />
<Label Text="Large font size"
       FontSize="Large" />

これに相当する C# コードを次に示します。

Label label1 = new Label
{
    Text = "Font size 24",
    FontSize = 24
};

Label label2 = new Label
{
    Text = "Large font size",
    FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label))
};

または、メソッドには Device.GetNamedSize 、2 番目の引数を次のように指定するオーバーライドがあります Element

Label myLabel = new Label
{
    Text = "Large font size",
};
myLabel.FontSize = Device.GetNamedSize(NamedSize.Large, myLabel);

Note

値を FontSize 指定すると、デバイスに依存しない単位で測定されます double。 詳細については、「 測定単位」を参照してください。

名前付きフォント サイズの詳細については、「名前 付きフォント サイズについて」を参照してください。

フォント ファミリを設定する

テキストを表示するコントロールは、プロパティを FontFamily フォント ファミリ名 ("Times Roman" など) に設定できます。 ただし、これは、そのフォント ファミリが特定のプラットフォームでサポートされている場合にのみ機能します。

プラットフォームで使用できるフォントの派生を試みるために使用できるさまざまな手法があります。 ただし、TTF (True Type Format) フォント ファイルが存在することは、必ずしもフォント ファミリを意味するとは限りません。また、多くの場合、TTF はアプリケーションで使用することを意図していないものに含まれます。 さらに、プラットフォームにインストールされているフォントは、プラットフォームのバージョンによって変更される可能性があります。 したがって、フォント ファミリを指定するための最も信頼性の高い方法は、カスタム フォントを使用することです。

カスタム フォントを共有プロジェクトに Xamarin.Forms 追加し、追加作業なしでプラットフォーム プロジェクトで使用できます。 その手順は次のとおりです。

  1. 埋め込みリソースとして共有プロジェクトに Xamarin.Forms フォントを追加します (ビルド アクション: EmbeddedResource)。
  2. 属性を使用して、 AssemblyInfo.cs などのファイルにフォント ファイルをアセンブリに ExportFont 登録します。 省略可能なエイリアスを指定することもできます。

次の例は、アセンブリに登録されているLobster-Regularフォントとエイリアスを示しています。

using Xamarin.Forms;

[assembly: ExportFont("Lobster-Regular.ttf", Alias = "Lobster")]

Note

フォントは、アセンブリにフォントを登録するときにフォルダー名を指定しなくても、共有プロジェクト内の任意のフォルダーに配置できます。

Windows では、フォント ファイル名とフォント名が異なる場合があります。 Windows でフォント名を検出するには、.ttf ファイルを右クリックし、[ プレビュー] を選択します。 その後、プレビュー ウィンドウからフォント名を決定できます。

その後、フォントは、ファイル拡張子なしでその名前を参照することで、各プラットフォームで使用できます。

<!-- Use font name -->
<Label Text="Hello Xamarin.Forms"
       FontFamily="Lobster-Regular" />

または、エイリアスを参照して各プラットフォームで使用することもできます。

<!-- Use font alias -->
<Label Text="Hello Xamarin.Forms"
       FontFamily="Lobster" />

これに相当する C# コードを次に示します。

// Use font name
Label label1 = new Label
{
    Text = "Hello Xamarin.Forms!",
    FontFamily = "Lobster-Regular"
};

// Use font alias
Label label2 = new Label
{
    Text = "Hello Xamarin.Forms!",
    FontFamily = "Lobster"
};

次のスクリーンショットは、カスタム フォントを示しています。

iOS および Android のカスタム フォントのカスタム フォント

重要

Windows 上のリリース ビルドの場合は、カスタム フォントを含むアセンブリがメソッド呼び出しで Forms.Init 引数として渡されていることを確認します。 詳細については、トラブルシューティングのヒントに関するページをご覧ください。

プラットフォームごとにフォント プロパティを設定する

OnPlatformプラットフォームごとにフォント プロパティを設定するために、XAML でクラスとOnクラスを使用できます。 次の例では、各プラットフォームで異なるフォント ファミリとサイズを設定します。

<Label Text="Different font properties on different platforms"
       FontSize="{OnPlatform iOS=20, Android=Medium, UWP=24}">
    <Label.FontFamily>
        <OnPlatform x:TypeArguments="x:String">
            <On Platform="iOS" Value="MarkerFelt-Thin" />
            <On Platform="Android" Value="Lobster-Regular" />
            <On Platform="UWP" Value="ArimaMadurai-Black" />
        </OnPlatform>
    </Label.FontFamily>
</Label>

このプロパティは Device.RuntimePlatform 、プラットフォームごとにフォント プロパティを設定するためにコードで使用できます

Label label = new Label
{
    Text = "Different font properties on different platforms"
};

label.FontSize = Device.RuntimePlatform == Device.iOS ? 20 :
    Device.RuntimePlatform == Device.Android ? Device.GetNamedSize(NamedSize.Medium, label) : 24;
label.FontFamily = Device.RuntimePlatform == Device.iOS ? "MarkerFelt-Thin" :
   Device.RuntimePlatform == Device.Android ? "Lobster-Regular" : "ArimaMadurai-Black";

プラットフォーム固有の値の提供の詳細については、「プラットフォーム固有の 値を指定する」を参照してください。 マークアップ拡張機能の詳細 OnPlatform については、「 OnPlatform マークアップ拡張機能」を参照してください。

名前付きフォント サイズを理解する

Xamarin.Forms は、特定のフォント サイズを NamedSize 表す列挙体のフィールドを定義します。 次の表にNamedSize、iOS、Android、ユニバーサル Windows プラットフォーム (UWP) のメンバーとその既定のサイズを示します。

メンバー iOS Android UWP
Default 17 14 14
Micro 12 10 15.667
Small 14 14 18.667
Medium 17 17 22.667
Large 22 22 32
Body 17 16 14
Header 17 14 46
Title 28 24 24
Subtitle 22 16 20
Caption 12 12 12

サイズの値は、デバイスに依存しない単位で測定されます。 詳細については、「 測定単位」を参照してください。

Note

iOS と Android では、名前付きフォント サイズはオペレーティング システムのアクセシビリティ オプションに基づいて自動スケーリングされます。 この動作は、プラットフォーム固有の iOS で無効にすることができます。 詳細については、「 iOS での名前付きフォント サイズのアクセシビリティスケーリング」を参照してください。

フォント アイコンの表示

フォント アイコンは、オブジェクト内のフォント アイコン データを指定することで、アプリケーションによってXamarin.FormsFontImageSource表示できます。 クラスから ImageSource 派生するこのクラスには、次のプロパティがあります。

  • Glyph – フォント アイコン stringの Unicode 文字値。
  • Sizedouble– レンダリングされたフォント アイコンのサイズをデバイスに依存しない単位で示す値。 既定値は 30 です。 さらに、このプロパティは、名前付きフォント サイズに設定できます。
  • FontFamilystring– フォント アイコンが属するフォント ファミリを表します。
  • Color – フォント アイコンを表示するときに使用する省略可能 Color な値。

フォント データは、表示できる任意のビューで表示 ImageSourceできます。 この方法では、フォント アイコンの表示を 1 つのテキスト表示ビューに制限するのではなく、絵文字などのフォント アイコンを複数のビュー Labelで表示できます。

重要

フォント アイコンは、現在、Unicode 文字表現でのみ指定できます。

次の XAML の例では、1 つのフォント アイコンがビューに Image 表示されます。

<Image BackgroundColor="#D1D1D1">
    <Image.Source>
        <FontImageSource Glyph="&#xf30c;"
                         FontFamily="{OnPlatform iOS=Ionicons, Android=ionicons.ttf#}"
                         Size="44" />
    </Image.Source>
</Image>

このコードは、Ionicons フォント ファミリの XBox アイコンを Image ビューに表示します。 このアイコンの Unicode 文字は \uf30c、XAML &#xf30c;でエスケープする必要があるために注意してください。 これに相当する C# コードを次に示します。

Image image = new Image { BackgroundColor = Color.FromHex("#D1D1D1") };
image.Source = new FontImageSource
{
    Glyph = "\uf30c",
    FontFamily = Device.RuntimePlatform == Device.iOS ? "Ionicons" : "ionicons.ttf#",
    Size = 44
};

バインド可能なレイアウトのサンプルの次のスクリーンショットは、 バインド可能なレイアウト によって表示されているいくつかのフォント アイコンを示しています。

iOS および Android のフォント アイコンがスクリーンショット