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

Искаженное отображение Item


dmitry

Вопрос

Добрый день.

Никак не могу справиться с одной проблемой при работе с компонентом ListView. Использую Delphi XE10.1 - Berlin.

В тестовом проекте создал два вида: Windows, Android 10 Tabled.

На главную форму положил компонент ListView и две кнопки для заполнения ListView и очистки.

Способ отображения Items - Динамический и состоит из двух текстовых элементов (TaskName и Status).

В TaskName может содержаться очень большой текст, поэтому я самостоятельно рассчитываю высоту Item, с помощью кода приведенного на данном форуме.

Все замечательно работает на Windows платформе, а вот под Android при создании Item появляются артефакты, текст как бы обрезается, но стоит повернуть ориентацию планшета, так сразу артефакты пропадают.

Помогите избавиться от артефактов. Свой тестовый проект прилагаю.

 

TestProject.rar

Безымянный.png

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

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

  • 0

В продолжении,

и на платформе windows возникают артефакты.

HyperZen, обсуждение читал, Спасибо. Не могли бы Вы приложить Ваш код, который работает 100% на всех платформах.

Я использую следующий код для подсчета высоты:

function TForm1.CalculateListItemObjectHeight(
  const ATextObject: TListItemText): Single;
Var
  Layout: TTextLayout;
begin
Layout := TTextLayoutManager.DefaultTextLayout.Create;
TRY
  Layout.BeginUpdate;
  TRY
    Layout.Text := ATextObject.Text;
    Layout.MaxSize := TPointF.Create(ATextObject.Width, TTextLayout.MaxLayoutSize.Y);
    Layout.Font.Assign(ATextObject.Font);
    Layout.WordWrap := ATextObject.WordWrap;
    Layout.Trimming := ATextObject.Trimming;
    Layout.HorizontalAlign := ATextObject.TextAlign;
    Layout.VerticalAlign := ATextObject.TextVertAlign;
  FINALLY
    Layout.EndUpdate;
  END;
  Result := Layout.Height;
FINALLY
  Layout.Free;
END;
end;
procedure TForm1.ListView1UpdateObjects(const Sender: TObject;
  const AItem: TListViewItem);
Var
  iTaskName: TListItemText;
  iStatus: TListItemText;
  iTaskNameHeight: Single;
  iStatusHeight: Single;
  iItemHeight: Single;
begin
iTaskName := AItem.Objects.FindDrawable('TaskName') As TListItemText;
If iTaskName <> Nil Then
Begin
  iTaskName.Width := ListView1.Width;
   iTaskName.Font.Size := ListView1.ItemAppearanceObjects.ItemObjects.Text.Font.Size;
End;
iStatus := AItem.Objects.FindDrawable('Status') As TListItemText;
If iStatus <> Nil Then
Begin
  iStatus.Width := ListView1.Width;
  iStatus.Font.Size := ListView1.ItemAppearanceObjects.ItemObjects.Text.Font.Size;
  If iStatus.Text = 'NORMAL' Then
    iStatus.TextColor := TAlphaColorrec.Blue;
End;
iTaskNameHeight := CalculateListItemObjectHeight(iTaskName);
iStatusHeight := CalculateListItemObjectHeight(iStatus);
iTaskName.Height := Round(iTaskNameHeight);
iStatus.Height := Round(iStatusHeight);
iStatus.PlaceOffset.Y := iTaskName.Height + 2;
iItemHeight := Round(iTaskNameHeight + iStatusHeight);
AItem.Height := Round(iItemHeight) + 5;
end;

 

Безымянный.png

Ссылка на комментарий
  • 0
22 часа назад, dmitry сказал:

HyperZen, обсуждение читал, Спасибо. Не могли бы Вы приложить Ваш код, который работает 100% на всех платформах.

Вам надо посмотреть уроки как работать с DynamicAppearance режимом, в программе Вы ссылаетесь на поля с именами TaskName, Status - я их в программе вообще не нашел, не понятно как вообще TListView создает Item'ы без ошибок...

1.jpg

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

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

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

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

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

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

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

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

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

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

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