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

[Android]Каталог, вывод в 2-3 колонки


Mantikor

Вопрос

zairkz, спасибо! Правда оказалось немного не то что мне нужно. Горизонтальный скролл оказывается нужен только вертикальный скролл. Пытаюсь сделать подобие каталога, как на скриншоте. Нужно в зависимости от ширины экрана выводить список товаров в одну/две/три колонки. Только с вертикальным скролом. Пробую через TListView, но что то не получается. Опыта написания для Android можно сказать нет, весь опыть - написание БД, много лет назад. Буду благодарен за помощь, можно в личку.

post-2088-0-44789500-1456752593_thumb.pn

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

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

  • 0

На ListView будет достаточно сложно это реализовать.

Попробуйте TPresentedScrollBox и элементы стиля.

Стиль нужен: к примеру: post-412-0-62092500-1456819489.png

Вам необходимо фиксированные размеры панелек, например глобальные переменные

  ObjectHeight := 205;

  ObjectWidth := 160;

  PanHeight := 200;

  PanWidth := 148;

Затем вычислить количество колонок на FormResize, тоже глобальные пр.

 

procedure TForm_main.FormResize(Sender: TObject);

begin

  PrColumns := Floor(Form_main.ClientWidth / ObjectWidth);

  AllMargins := (Form_main.ClientWidth - (PrColumns * PanWidth)) / (PrColumns + 1);

end;

 

Процедура заполнения, здесь только создания панелей в скроллбоксе, я использовал обычный button в виде панельки

procedure TForm_main.LoadObject();

var

  x, i: integer;

  LT: TLayout;

  Butt: TButton;

begin

  x := 0;

  for i := 0 to OBJ.Count - 1 do

  begin

      if x mod PrColumns = 0 then

      begin

        LT := TLayout.Create(PresentScrolBox);

        LT.Parent := PresentScrolBox;

        LT.Position.y := PresentScrolBox.ContentBounds.Height + 100;

        LT.Align := TAlignLayout.Top;

        LT.Height := ObjectHeight;

        LT.HitTest := false;

      end;

 

      Butt:= TButton.Create(LT);

      Butt.Parent := LT;

      Butt.Position.x := LT.Width;

      Butt.Height := PanHeight;

      Butt.Width := PanWidth;

      Butt.Align := TAlignLayout.Left;

      Butt.Margins.Top := (ObjectHeight - PanHeight) / 2;

      Butt.Margins.Bottom := (ObjectHeight - PanHeight) / 2;

      Butt.Margins.Left := AllMargins;

      Butt.StyleLookup := 'buttonx';

      Butt.text := '';

      Butt.tag := 55; //Пример

      Butt.TextSettings.WordWrap := True;

      Butt.OnTap := Form_main.ButObjTap;

{$IFDEF MSWINDOWS}

      Butt.OnClick := Form_main.ButtObjectClick;

{$ENDIF}

      Butt.OnApplyStyleLookup := Form_main.ObjectStyle;

      x := x + 1;

    end;

  end;

  LT := TLayout.Create(SB_Object);

  LT.Parent := SB_Object;

  LT.Position.y := SB_Object.ContentBounds.Height + 100;

  LT.Align := TAlignLayout.Top;

  LT.Height := 72;

end;

 

После создания заполнять данными необходимо в Butt.OnApplyStyleLookup := Form_main.ObjectStyle;

procedure TForm_main.ObjectStyle(Sender: TObject);

var

  i: integer;

begin

  for i := 0 to 9 do

    if TButton(Sender).tag=i then

    begin

      TButton(TButton(Sender).FindStyleResource('btn_add')).tag := i;

      // TButton(TButton(Sender).FindStyleResource('btn_add')).text := ‘+’;

      TButton(TButton(Sender).FindStyleResource('btn_add')).OnClick := Form_main.But_Main_Add;

      TText(TButton(Sender).FindStyleResource('text')).text := 'i = '+inttostr(i);

      TText(TButton(Sender).FindStyleResource('obj_price')).text := ‘500’;

      TImage(TButton(Sender).FindStyleResource('img')).Bitmap.Assign(Какой нибудь битмап);

      break;

    end;

end;

 

Желательно данные и картинки загрузить сперва в Record, затем заполнять их в OnApplyStyleLookup.

ХЗ может подойдет вариант, на слабых телефонах лагов не много, но и ListView на слабых подлагивает.

 

Как вариант старое наше с Zuby приложение по доставке еды Gepard, не судите строго мы его забросили)https://play.google.com/store/apps/details?id=kz.vbaze.Gepard

post-412-0-16967200-1456819615_thumb.png

 

 

 

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

у меня четкое ощущение, что при необходимости делать что-то подобное я приму решение рисовать все это самостоятельно

рассчитать что должно быть на экране, и в цикле прорисовать 10 панелек гораздо проще укрощения неприспособленных компонентов ))

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

у меня четкое ощущение, что при необходимости делать что-то подобное я приму решение рисовать все это самостоятельно

рассчитать что должно быть на экране, и в цикле прорисовать 10 панелек гораздо проще укрощения неприспособленных компонентов ))

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

Ссылка на комментарий
  • 0
  • Модераторы

как работать с картинками, чтобы избежать тормозов?

Думаю подгрузить из инета список актуальных ссылок на эскизы, потоком загрузить эскизы на устройство, сохранить при просмотре картинки как jpeg. повторно считывать их из файлов или из sqlite?

Или лучше другой подход?

Отдельную тему создавайте (в правилах ясно указано: одна тема-один вопрос), здесь обсуждается другая тема.

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

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

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

Гость
Ответить на вопрос...

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

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

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

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

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

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

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