Предложения по шрифту, который я могу использовать как для Android, так и для iOS, который похож на системные шрифты по умолчанию для каждого

#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;
    }
}
  

Надеюсь, это поможет! 🙂