Я следую за Fonts Tutorial, предложенный Xamarin, чтобы иметь пользовательские загруженные шрифты на каждой пластине. Однако у меня много проблем, и я также пытаюсь найти способ сделать что-то, но не знаю, как заставить его работать.Xamarin Forms Custom Fonts CrossPlatform
Прежде всего, взгляните на учебник и начните с соответствующей части. Using a Custom Font
IOS:
Он говорит, что мы должны добавить font.tff в ресурсов папки. Тогда нам нужно что-то сделать с Info.plist, но что? Я не уверен, что понимаю, что я должен делать.
AnDrOID:
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/
в проекте приложения и установить Build Action: Content. После реализации Xamarin.Forms для Windows Phone может ссылаться на пользовательский шрифт, который был добавлен в проект, следуя определенному стандарту именования. Тем не менее, шрифт не отображается на экране, шрифт остается стандартным, почему?
В настоящее время, после многих поисков, много попробовать ... Ничего ..
Я пытаюсь добавить 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 это должно быть сделано другим способом, поэтому я пытаюсь изменить FontFamily на часть C#.
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. Я хочу (f FontFamily работает один день ..), чтобы иметь defintion
, мы заставляем меня просто редактировать одну строку поля, чтобы установить FontFamily Label на моей странице.
<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