#xamarin #xamarin.forms
#xamarin #xamarin.forms
Вопрос:
У меня есть приложение Forms для Android и iOS, которое в настоящее время использует шрифты по умолчанию для каждой ОС. Я бы хотел, чтобы оба приложения выглядели как можно более похожими.
Существуют ли какие-либо пакеты шрифтов, которые я мог бы использовать для этого, и как я мог бы реализовать эту функциональность. Я понимаю, что выбор шрифтов — это то, о чем у многих людей могут быть разные мнения, но некоторые начатые предложения и любые советы были бы высоко оценены.
Ответ №1:
Как я думаю, вы можете использовать некоторые общие FontFamily
для этого. Как указано в этом руководстве, вам нужно добавить нужный шрифт (формат.ttf) и для каждой платформы вам нужно выполнить следующие действия: iOS:
Откройте свой info.plist в вашем любимом текстовом редакторе и в этом разделе.
<key>UIAppFonts</key>
<array>
<string>Fonts/Lato-Regular.ttf</string>
<string>Fonts/Stackyard.ttf</string>
<string>Fonts/ComicSaaaaaans.ttf</string>
</array>
Оттуда вы можете использовать iOS Appearance API, чтобы применить свой шрифт ко всему, что вы хотите. В моем случае это была панель навигации, которая привела к этому:
UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes
{
TextColor = UIColor.White,
Font = UIFont.FromName("Stackyard PERSONAL USE", 32)
});
Для Android:
Теперь что нам нужно сделать, так это создать CustomRenderer для элементов управления, в которых мы хотим отображать наши шрифты! Очевидным выбором является элемент управления Label. Когда мы определяем средство визуализации с этим кодом, переопределяющим ElementChanged, мы можем использовать styleId, как вы видели выше, чтобы указать, какой шрифт использовать, прямо из нашего общего кода!
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;
}
}
Надеюсь, это поможет! 🙂