フォント Xamarin.Forms
既定では、 Xamarin.Forms 各プラットフォームで定義されたシステム フォントを使用します。 ただし、テキストを表示するコントロールは、このフォントの変更に使用できるプロパティを定義します。
FontAttributes
、、およびItalic
. の 3 つのメンバーBold
None
を持つ列挙体である型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 追加し、追加作業なしでプラットフォーム プロジェクトで使用できます。 その手順は次のとおりです。
- 埋め込みリソースとして共有プロジェクトに Xamarin.Forms フォントを追加します (ビルド アクション: EmbeddedResource)。
- 属性を使用して、 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"
};
次のスクリーンショットは、カスタム フォントを示しています。
重要
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 文字値。Size
double
– レンダリングされたフォント アイコンのサイズをデバイスに依存しない単位で示す値。 既定値は 30 です。 さらに、このプロパティは、名前付きフォント サイズに設定できます。FontFamily
string
– フォント アイコンが属するフォント ファミリを表します。Color
– フォント アイコンを表示するときに使用する省略可能Color
な値。
フォント データは、表示できる任意のビューで表示 ImageSource
できます。 この方法では、フォント アイコンの表示を 1 つのテキスト表示ビューに制限するのではなく、絵文字などのフォント アイコンを複数のビュー Label
で表示できます。
重要
フォント アイコンは、現在、Unicode 文字表現でのみ指定できます。
次の XAML の例では、1 つのフォント アイコンがビューに Image
表示されます。
<Image BackgroundColor="#D1D1D1">
<Image.Source>
<FontImageSource Glyph=""
FontFamily="{OnPlatform iOS=Ionicons, Android=ionicons.ttf#}"
Size="44" />
</Image.Source>
</Image>
このコードは、Ionicons フォント ファミリの XBox アイコンを Image
ビューに表示します。 このアイコンの Unicode 文字は \uf30c
、XAML 
でエスケープする必要があるために注意してください。 これに相当する 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
};
バインド可能なレイアウトのサンプルの次のスクリーンショットは、 バインド可能なレイアウト によって表示されているいくつかのフォント アイコンを示しています。
スクリーンショット