• 0
Mantikor

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

Вопросы

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

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

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


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

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

  • 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

Тема создана по просьбе Mantikor

Сообщения перенесены из темы TListViewHorz

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

Войти

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

Войти

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

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