Xamarin.Forms
スタイルのカスタムフォント
サーチ…
備考
Sylesでのカスタムフォントへのアクセス
Xamarin.Formsは、グローバルスタイルでクロスプラットフォームアプリケーションをスタイリングするための優れたメカニズムを提供します。
モバイルの世界では、アプリケーションはきれいで、他のアプリケーションから優れている必要があります。この文字の1つは、アプリケーションで使用されるカスタムフォントです。
Xamarin.FormsのXAML Stylingのパワーサポートにより、あなたのカスタムフォントですべてのラベルのベーススタイルが作成されました。
iOSとAndroidプロジェクトにカスタムフォントを含めるには、Geraldによって書かれたiOSとAndroidでカスタムフォントを使用するXamarin.Formsポストのガイドに従ってください。
App.xamlファイルリソースセクションでスタイルを宣言します。これにより、すべてのスタイルがグローバルに表示されます。
上のGerald投稿から、StyleIdプロパティを使用する必要がありますが、これはバインド可能なプロパティではないため、Style Setterでこのプロパティを使用するには、Attachableプロパティを作成する必要があります。
public static class FontHelper
{
public static readonly BindableProperty StyleIdProperty =
BindableProperty.CreateAttached(
propertyName: nameof(Label.StyleId),
returnType: typeof(String),
declaringType: typeof(FontHelper),
defaultValue: default(String),
propertyChanged: OnItemTappedChanged);
public static String GetStyleId(BindableObject bindable) => (String)bindable.GetValue(StyleIdProperty);
public static void SetStyleId(BindableObject bindable, String value) => bindable.SetValue(StyleIdProperty, value);
public static void OnItemTappedChanged(BindableObject bindable, object oldValue, object newValue)
{
var control = bindable as Element;
if (control != null)
{
control.StyleId = GetStyleId(control);
}
}
}
次に、App.xamlリソースにスタイルを追加します。
<?xml version="1.0" encoding="utf-8" ?>
<Application xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:h="clr-namespace:My.Helpers"
x:Class="My.App">
<Application.Resources>
<ResourceDictionary>
<Style x:Key="LabelStyle" TargetType="Label">
<Setter Property="FontFamily" Value="Metric Bold" />
<Setter Property="h:FontHelper.StyleId" Value="Metric-Bold" />
</Style>
</ResourceDictionary>
</Application.Resources>
</Application>
上記の記事によると、AndroidプラットフォームのLabelRendererから継承するLabel用のカスタムレンダラーを作成する必要があります。
internal class LabelExRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
if (!String.IsNullOrEmpty(e.NewElement?.StyleId))
{
var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf");
Control.Typeface = font;
}
}
}
iOSプラットフォームの場合、カスタムレンダラは必要ありません。
これで、あなたのページのマークアップでスタイルを得ることができます:
特定のラベルについて
<Label Text="Some text" Style={StaticResource LabelStyle} />
または、スタイルをLabesStyleに基づいて作成して、ページ上のすべてのラベルにスタイルを適用します
<!-- language: xaml -->
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="My.MainPage">
<ContentPage.Resources>
<ResourceDictionary>
<Style TargetType="Label" BasedOn={StaticResource LabelStyle}>
</Style>
</ResourceDictionary>
</ContentPage.Resources>
<Label Text="Some text" />
</ContentPage>