#delphi #firemonkey
#delphi #firemonkey
Вопрос:
Я следую примеру, чтобы загрузить пользовательский шрифт (пользовательский интерфейс Segoe) в приложение для Android:
Иконография шрифтов True Type для приложений Android и iOS
Моя проблема в том, что IDE (RAD Studio 10.1 Berlin) не сохраняет значения по умолчанию в файлах FMX (файлах форм). Во время разработки шрифтом по умолчанию, похоже, уже является «Segoe UI», поэтому IDE отображается только (Default)
в инспекторе объектов и поэтому не сохраняет это значение в файле формы FMX. НО шрифтом по умолчанию в Android является «Roboto», а не «Segoe UI», и приложение действительно использует «Roboto» в качестве шрифта по умолчанию во время выполнения.
Таким образом, значения по умолчанию в инспекторе объектов не сохраняются для разных целевых платформ. Это очень раздражает!
Является ли это (логической) ошибкой в IDE? Как я могу отключить эту функцию IDE или явно задать значение во время разработки (которое случайно также является значением по умолчанию во время разработки в IDE под Windows) и сохранить его для целевой платформы (в данном случае Android)?
Я попытался перейти в текстовый режим для файла формы FMX и установить значение вручную, но при переключении обратно в режим разработки IDE изменяет значение в инспекторе объектов (Default)
на снова, и при повторном возврате в текстовый режим эта строка была удалена. Я хочу / должен установить его во время разработки, а не во время выполнения, но я не могу этого сделать.
Мне также нужны такие значения по умолчанию для других свойств, а не только для шрифта.
Комментарии:
1. Я не надеюсь на это, я использую его как пользовательский шрифт, как я написал во втором предложении.
2. Если вы скажете мне, как загружать пользовательские шрифты на Android с помощью FMX во время выполнения, я был бы очень рад. Причина, по которой я считаю это полезным во время разработки, заключается в том, что я могу сразу увидеть и протестировать его перед компиляцией для своего устройства.
3. Да, я спрашиваю о настройке свойств в инспекторе объектов. Одним из них является
font family
. Я знаю, как использовать пользовательские шрифты на Android с помощью FMX, и я явно устанавливаю для этогоfont family
свойстваSegoe UI
значение . Но когда я это делаю, IDE отбрасывает мое значение и вместо этого устанавливает его(Default)
равным (оно просто удаляет мою явную настройку). Но стандартный шрифт AndroidRoboto
, поэтому благодаря этой глупой IDE я не могу установить шрифтSegoe UI
во время разработки для Android. Кажется, я могу установить его только во время выполнения — и я не знаю, как установить его во время выполнения с помощью руководства, на которое я ссылался выше.4. Я думаю, вы действительно не понимаете, что я пишу. Я не использую VLC или Windows. Я сделал свое заявление совершенно ясным. Пожалуйста, прочтите это еще раз и воспроизведите то, что я написал, если вы не знаете поведение IDE, которое я описываю.
5. Если кто-то отклонит мой вопрос, пожалуйста, напишите комментарий, чтобы сообщить мне, что я сделал не так и как я могу улучшить (потому что я хочу и буду улучшать). В противном случае, пожалуйста, не понижайте голос — особенно, если вы делаете это, потому что вам по какой-либо причине не нравится мой вопрос. Я старался быть настолько конкретным, насколько мог. Если кому-то нужна дополнительная информация от меня, пожалуйста, спросите.
Ответ №1:
Это сделано специально. Значение свойства по умолчанию не сохраняется в файле DFM / FMX, если свойство явно не запрашивает его через директиву nodefault
или stored=true
в самом объявлении свойства. Сохранение значений по умолчанию без запроса приведет к раздуванию ресурса DFM / FMX.
Вы ничего не можете сделать, чтобы переопределить это поведение, если вы не создаете новые компоненты для переопределения их объявлений свойств.
Вы не можете указать другое значение по умолчанию для каждой платформы во время разработки. Существует только одно свойство и только одно значение по умолчанию для него. Если вам нужны разные значения для каждой платформы во время выполнения, вам необходимо либо:
-
создайте отдельные представления для каждой платформы и назначьте разные значения свойств в каждом представлении.
-
установите значение свойства в коде во время выполнения, например, в
OnCreate
событии вашей формы.
Комментарии:
1. Итак, чтобы прояснить это для меня еще раз: это действительно означает, что невозможно установить шрифт
Segoe UI
на Android во время разработки для Android?2. Тогда дизайн RAD Studio явно нарушен. Сохранение значений по умолчанию не требуется, да. Но IDE может добавить опцию в инспектор объектов для возврата значения к значению по умолчанию. Это было бы подходящим поведением. Прямо сейчас IDE запрещает это, что не соответствует концепции RAD. Редактор времени разработки является одной из основных функций. Я не могу получить сотни компонентов. # 1: не решает проблему, поскольку она нарушена IDE. Аналогичное поведение со значениями по умолчанию. # 2: не работает со связанным руководством, за исключением того, что вы можете рассказать мне, как загружать шрифты во время выполнения.
3. @StanE: если вы считаете, что дизайн RAD Studio нарушен, сообщите об этом Embarcadero. Жалобы на это здесь неуместны и абсолютно ничего не изменят. То, что вы не согласны с дизайном, не делает ответ Реми неправильным. Он ответил на заданный вами вопрос; нравятся ли вам факты, представленные в ответе, или нет, не имеет значения.
4. @KenWhite Я спрашиваю и ищу решение, а не жалуюсь. И я не думаю, что это сломано — оно сломано. Также я поддержал ответ Реми, поэтому я не понимаю, почему вы подразумеваете, что я считаю его ответ неправильным. Где я это написал? Если именно поэтому вы, ребята, отклонили мой вопрос с -2, то вы явно не поняли, как работает система голосования здесь, в stackoverflow. Голоса даются за контент, а не потому, что он вам нравится или не нравится. Для детей… Опять же: у моего вопроса есть 2 отрицательных ответа. Не мог бы кто-нибудь, пожалуйста, объяснить мне, что именно не так с моим первоначальным вопросом?
5.
TFont.FamilyName
Свойство не сохраняется в файле DFM / FMX, если его значение во время разработки совпадаетTPlatform.GetDefaultFontFamilyName
. Каждая платформа имеет разнуюTPlatform
реализацию, гдеSegoe UI
по умолчанию используется только в Windows Vista и более поздних версиях. Можно было бы ожидать, что каждая целевая платформа, добавленная в проект, будет использовать другуюTPlatform
реализацию во время разработки, но это, вероятно, не так, поскольку сама IDE работает только в Windows. Для использованияSegoe UI
на платформах, отличных от Windows, скомпилируйте проект в XP (где используется значение по умолчаниюTahoma
) или задайте шрифт в коде во время выполнения.
Ответ №2:
Третьим решением ваших проблем может быть использование стилей для определения шрифта по умолчанию для ваших компонентов. Таким образом, шрифт определяется не DFM, а самим стилем.
Конечно, если вы не использовали стили перед началом работы с ними, это может быть немного сложно. Но как только вы освоитесь с этим, вы увидите большое преимущество, которое могут предоставить стили, особенно в проекте с большим количеством форм, поскольку вам нужно только изменить стиль, и изменения влияют на каждый компонент, который использует этот конкретный стиль.
Говоря о стилях, вы уверены, что вы их еще не используете, и стиль может переопределять ваши настройки шрифта, что может объяснить, почему предложения от других не сработали?