我遵循由Xamarin建議的Fonts Tutorial在每個平臺上具有自定義下載的字體。然而,我遇到了很多問題,我也試圖找到一些方法來做一些事情,但沒有找到如何使它工作。Xamarin Forms自定義字體CrossPlatform
首先,看看教程,並從有關部分開始。 Using a Custom Font
的iOS:
它說,我們必須將font.tff添加到資源文件夾。 然後,我們必須對Info.plist做些什麼,但是什麼?我不確定要明白我必須做什麼。
安卓:
Xamarin.Forms爲Android目前不暴露在設置字體爲自定義字體文件的能力,因此需要自定義渲染。
CustomLabelRenderer.cs
public class CustomLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
System.Diagnostics.Debug.WriteLine(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf");
if (!string.IsNullOrEmpty(e.NewElement?.StyleId))
{
var font = Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, e.NewElement.StyleId + ".ttf");
Control.Typeface = font;
}
}
}
根據該文件,在OnElementChanged()
會被調用,然而,事實並非如此。 Debug.WriteLine()不顯示任何內容。 爲什麼?
WinPhone 8.1:
我們必須將字體文件添加到/Assets/Fonts/
文件夾中的應用程序項目,並設置生成操作:內容。一旦實現,Windows Phone的Xamarin.Forms可以通過遵循特定的命名標準來引用已添加到項目中的自定義字體。 但是,字體不在視圖上,字體保持標準,爲什麼?
目前,大量的搜索,很多嘗試的......沒什麼..
後,我想補充DIN Condensed Bold
字體
我的XAML佈局:
<ContentPage.Content>
<AbsoluteLayout BackgroundColor="#235A5E">
<!-- Menu -->
<AbsoluteLayout x:Name="Menu" BackgroundColor="#2F767B"
AbsoluteLayout.LayoutBounds="0,0,1,0.1"
AbsoluteLayout.LayoutFlags="All">
<Label x:Name="label" Text="Connection" TextColor="White" FontSize="30" VerticalOptions="Center" HorizontalOptions="Center"
AbsoluteLayout.LayoutBounds="0.5, 0, 0.8, 1"
AbsoluteLayout.LayoutFlags="All"/>
<Button x:Name="ConnectionButton" BackgroundColor="Transparent" BorderColor="Transparent"
AbsoluteLayout.LayoutBounds="1, 0.5, 0.2, 1"
AbsoluteLayout.LayoutFlags="All"/>
</AbsoluteLayout>
</AbsoluteLayout>
</ContentPage.Content>
因此,標籤的FontFamily屬性可以像這樣設置
<Label Text="Hello World !" FontFamily="DIN Condensed Bold"
但是,正如本教程中所述,對於WinPhone的例子來說,它必須以另一種方式完成,所以我嘗試通過C#部分更改FontFamily。
public partial class MyPage : ContentPage
{
public string FontFamily { get; set; }
public MyPage()
{
InitializeComponent();
label.FontFamily = Device.OnPlatform(
iOS: "DIN Condensed Bold",
Android: "DIN Condensed Bold",
WinPhone: @"Assets\Fonts\DINCondensedBold.ttf#DIN Condensed Bold"
);
}
}
哪個不行!我還看到了有關XAML部分的一些有趣的東西。我希望(如果FontFamily的作品有一天......)擁有defintion
,我們只需編輯一個字段字符串即可設置我的頁面的所有Label的FontFamily。
<ContentPage.Resources>
<ResourceDictionary>
</ResourceDictionary>
</ContentPage.Resources>
我看到了,我也許能定義的FontFamily所有MyPage.xaml的標籤的,它是如何工作的?
我也是一個關於MVVM新手,但我想我綁定到public string FontFamily { get; set; }
在XAML <Label Text="Hello World !" FontFamily="{Binding FontFamily}"/>
但有更多的時間定義的標籤,沒有成功..
我完全以卡住了...誰受得了在教程之後,幫助編寫教程或解釋我提到的每件事情。感謝您的幫助!
閱讀該指南鏈接的博客條目,它更詳細地描述了修改info.plist – Jason
您也可以嘗試一次處理這一個平臺 - 因爲它有多個問題打包到一個文章中,這很難精確地回答。 – Jason
感謝您的回答。對於其他人(Android/WinPhone),爲什麼它不起作用?我只是想爲有相同問題的人做一個問題/答案有用 – Emixam23