• 0
bigjorj

Подмена платформенного стиля через ресурсы

Вопросы

В продолжении темы http://fire-monkey.ru/topic/170-kak-izmenit-stil-po-umolchaniiu-dlia-androida/

 

Seatle. Android.

 

Пытаюсь заменить платформенный стиль под Android. Добавляю в проект ресурс под именем androidstyle в него помещаю свой стиль. Цель - не тянуть стиль по умолчанию дабы не раздувать apk еще на 2 мБ.

 

При компиляции получаю следующую ошибку

[DCC Error] E2597 C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: error: .\Android\Debug\Mobile.o: multiple definition of '__rsrc_N6RCDATA12androidstyleE'
  C:\Users\Public\Documents\Embarcadero\Studio\17.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: c:\program files (x86)\embarcadero\studio\17.0\lib\Android\Release\FMX.Controls.Android.o: previous definition here

Я так понимаю ругается на повтор имена ресурса. Как исправить? Или на 10 это больше не работает?

Изменено пользователем bigjorj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 0
unit FMX.Controls.Android;

interface

{$SCOPEDENUMS ON}

implementation

uses FMX.Types, FMX.Styles, System.Types, System.Classes, System.SysUtils;

{$R *.res}

initialization
  //TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Android, 'androidstyle');
end.

думаю это поможет

 

под Windows вообще 3 стиля...

  TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Windows, 'win7style');
  TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Windows, 'win8style');
  TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Windows, 'win10style');
Изменено пользователем ZuBy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да. Как раз в этом направлении копал.

 

Только помогло вот это 

unit FMX.Controls.Android;

interface

{$SCOPEDENUMS ON}

implementation

uses FMX.Types, FMX.Styles, System.Types, System.Classes, System.SysUtils;

//{$R *.res}

initialization
  TStyleManager.RegisterPlatformStyleResource(TOSPlatform.Android, 'androidstyle');
end.

То есть закомментировал загрузку ресурсов.

 

Но вот беда. Оказалось что в моем стиле были стили не для всех контролов... Половина контролов стала невидимыми

Изменено пользователем bigjorj

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вот что я вам скажу.

По моим наблюдениям загрузка стиля из файла или даже ресурса в TStyleManager происходит на Android намноооого дольше нежели переключение между разными TStyleBook с предварительно загруженными стилями. Возвращаюсь к StyleBook. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

 

Это поведение ожидаемо. Так как при переключении стиль бука, у вас уже загружен стиль в память.

При загрузке стиля из ресурсов, вы вначале тратите время на загрузку в память (десирелизация), а потом уже использование.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Ярослав, подскажите еще: правильно ли мы пошли по пути подмены стиля? Действительно ли нужно править FMX.Controls.Android;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу