Развертывание семейства шрифтов .otf в приложении FMX

Я пытаюсь реализовать собственное семейство шрифтов (несколько файлов .otf для разного веса, например, тяжелый, легкий, обычный, сверхлегкий ...) для моего приложения Firemonkey, которое будет развернуто как для Android, так и для iOS.

Реализовать семейство шрифтов на iOS было довольно просто, все, что мне нужно было сделать, это включить их в файл info.plist. При применении шрифта к этикетке в разделе «Шрифт> Семейство» мне нужно только ввести «Имя шрифта», и оно будет применено. Имейте в виду, что настоящего файла «Имя шрифта» нет, есть только «Имя шрифта Heavy» и другие значения.

Дополнительный вопрос, как мне вообще использовать вес шрифта в FMX? Я не нашел никакого свойства для установки веса шрифта.

Однако, если сделать то же самое в Android, результат будет совершенно другим. Я включаю шрифты в развертывание, и ввод «Имя шрифта» вообще не применяется, но если я введу, например, «Имя шрифта Ultralight», тогда будет применен шрифт с таким весом (в то время как на iOS добавление «Ultralight» не действует). Что еще хуже, добавление стилей к шрифту, таких как курсив и полужирный, вообще не применяется на Android, в то время как они применяются в iOS.

Почему эти двое действуют так по-разному и как преодолеть различия, чтобы они отображали одно и то же?

1 ответ

Поддержка пользовательских шрифтов в Android на Delphi FMX была недавно реализована в Sydney 10.4, и в Александрии 11 она все еще находится в зачаточном состоянии. Как вы заметили, вы должны ввести «полное» имя шрифта, чтобы он работал на Android, поскольку официальная поддержка отсутствует. для толщины шрифта еще нет.

Однако вы все равно можете достичь желаемых результатов, отредактировав и перекомпилировав некоторый исходный код, расположенный в файле. FMX.FontGlyphs.Android.pasиз вашей установки Delphi. Вы можете сделать что-то вроде этого:

  1. Найдите процедуру LoadResource из класса TAndroidFontGlyphManager. Вы можете увидеть, как FMX ищет шрифты, используя только имя семейства и расширение файла.
  2. Проверьте внутреннюю процедуру и то, как она определяет вес текущего шрифта.
  3. Следуя логике CreateTypefaceFromFamilyName добавьте что-то подобное непосредственно перед инициализацией переменной (не забудьте объявить FontStyle):
      FontStyle:='';
if not CurrentSettings.Style.Slant.IsRegular and not CurrentSettings.Style.Weight.IsRegular then
    FontStyle:=' Bold Italic'
else if not CurrentSettings.Style.Weight.IsRegular then
    FontStyle:=' Bold'
else if not CurrentSettings.Style.Slant.IsRegular then
    FontStyle:=' Italic';
  1. Измените задание на FontFile из:
      TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family + '.otf');

к:

      TPath.Combine(TPath.GetDocumentsPath, CurrentSettings.Family + FontStyle + '.otf');

(повторите и для .ttf)

Это должно добавить поддержку полужирного , курсива и полужирного курсива для Android. Это может быть дополнительно расширено для поддержки большего количества шрифтов, просто проверьте TFontWeight перечислить в единице FMX.Graphics.pas.

Другие вопросы по тегам