Перейти к содержанию
Fire Monkey от А до Я

Архитектура приложения под Андроид на основе TFrame


Рекомендуемые сообщения

Здравствуйте,

 

Прочитав тему http://fire-monkey.ru/topic/432-sovety-po-sozdaniiu-mobilnogo-prilozheniia-master-detail/?p=1638 решил переделать свое приложение с использованием Frame, подскажите правильно ли я его делаю

 

Primer.zip

Ссылка на комментарий
  • 2 недели спустя...
  • Администраторы

Добрый день,

 

Да, выглядит достойно. Один только момент относительно использования компонента TMultiView:

 

Он создает дополнительный контрол (TShadowedOverlayLayout), который перехватывает события касаний для определения момента выдвижения с края формы. Поэтому для этого контрола важно всегда находится поверх всех контролов формы. В тот момент, когда вы подключаете фрейм, фрейм по сути становится BringToFront и перекрывает TShadowedOverlayLayout и блокирует выдвижение TMultiView.

 

Чтобы этого избежать есть два варианта:

Первый вариант, дополнительно обновить выравнивание TMultiView в момент прикрепления фрейма:

procedure TfmMain.TabItemNext(ANextFrame: TFrameClass);
begin
  FFrame.DisposeOf;
  FFrame := nil;

  FFrame := ANextFrame.Create(Self);
  FFrame.Parent := Self;
  FFrame.Align := TAlignLayout.Client;
  // Если TMultiVIew использует Drawer режим, то перемещает контрол перехвата на верх.
  if mvMenu.Presenter is TMultiViewDrawerBasePresentation then
    TMultiViewDrawerBasePresentation(mvMenu.Presenter).DetailOverlay.BringToFront;
  mvMenu.HideMaster;
end;

Второй вариант, является в более хитрой комбинации TMultiView.TargetControl и фреймов и не требует дополнительно обращаться к drawer представлению TMultiView:

  1. Размещаем в корне формы TPanel или TLayout.
  2. Фрейм размещаем в TPanel или TLayout (см. 1 пункт).
procedure TfmMain.TabItemNext(ANextFrame: TFrameClass);
begin
  FFrame.DisposeOf;
  FFrame := nil;

  FFrame := ANextFrame.Create(Self);
  FFrame.Parent := Panel1; // <-- а при втором подходе размещаем фрейм в дополнительном контейнере
  FFrame.Align := TAlignLayout.Client;
  mvMenu.HideMaster;
end; 

TMutliView при загрузке представления (смены режима отображения) размещает TShadowedOverlayLayout в корне формы и отображает его по верх всех контролов формы. При использовании панели или слоя, TShadowedOverlayLayout будет всегда расположен поверх. 

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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