• 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 с предварительно загруженными стилями

 

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

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

Kitty и Равиль Зарипов (ZuBy) понравилось это

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


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

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

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу