Xamarin.Formsで共有プロジェクトに置いたフォントを使う
Xamarin.Forms 4.5からEmbedded Fonts
というプレビュー版の機能があって,これはどういうものかというと,これまでフォントを追加する場合は各プラットフォームのプロジェクト内にフォントファイルを配置する必要がありましたが,フォントファイルを共有プロジェクト内に1つ置くだけで使える,というものです.
これまではAndroidで正しく動かない場合があったりもしましたが,Xamarin.Forms 4.5.0.530では解消されています.
利用手順
手順は以下のとおりです.
- フォントを入手する.
- フォントファイルを共有プロジェクト内に置く.
- フォントファイルのビルドアクションを
Embedded Resource
にする. - AssemblyInfo.csに使用するフォントを記述する.
- 追記:AssemblyInfo.csでなくてもよい.
- 例えばApp.xaml.csでも良いようだ.
[assembly: ExportFont("Lato-Black.ttf", Alias = "LatoBlack")] [assembly: ExportFont("Lato-Bold.ttf", Alias = "LatoBold")] [assembly: ExportFont("Lato-Regular.ttf", Alias = "LatoRegular")] [assembly: ExportFont("fa-regular.otf", Alias = "FontAwesomeRegular")] [assembly: ExportFont("fa-solid.otf", Alias = "FontAwesomeSolid")] namespace TravelMonkey { public partial class App : Application {
フォントの入手
ttf(またはotf?試していない)ファイルを入手します. 入手先は参考までに↓. shuhelohelo.hatenablog.com
フォントファイルを共有プロジェクト内に置く
ソリューションエクスプローラで,共有プロジェクト内にドラッグアンドドロップすればOKです.
上のように適当なフォルダを作成してその中にフォントファイルを配置するのは自由ですが, プログラム的には特に意味は持ちません.
ファイルの置き場所については,公式ドキュメントにもあるように,任意のフォルダでよいとのことです.
フォントは、共有プロジェクト内の任意のフォルダーに置くことができます。フォントをアセンブリに登録するときにフォルダー名を指定する必要はありません。
利用する上でもフォルダを指定することはなく,フォントファイル名を指定するだけなので,開発者が管理がしやすいぐらいのメリットです.
フォントファイルのビルドアクションをEmbedded Resource
にする
ソリューションエクスプローラで,フォントファイルを右クリックしてコンテキストメニューからプロパティ
を選択します.
そして,ビルドアクションをEmbedded Resource
にします.
AssemblyInfo.csに使用するフォントを記述する
共有プロジェクト内にAssemblyInfo.cs
というファイルがあるので,その中に以下のように使用するフォントについて記述します.
[assembly: ExportFont("Bellota-Regular.ttf")]
または別名をつけることもできます.
[assembly: ExportFont("Bellota-Regular.ttf",Alias ="Bellota")]
配置したフォルダは関係ありません.
Embedded Resourceに設定したことで,プロジェクトファイルにフォントファイルのパスが登録されるからです.
利用する
利用するときは以下のようにFontFamilyにフォントファイル名を指定します.
または,AssemblyInfo.csで別名を指定した場合は,その別名を指定します.
<Label FontFamily="Bellota-Regular" HorizontalOptions="CenterAndExpand" Text="Hello Embedded Fonts" VerticalOptions="CenterAndExpand" />