Delphi ListViewItem的文本对齐

Delphi ListViewItem的文本对齐,delphi,firemonkey,tlistview,Delphi,Firemonkey,Tlistview,在Delphi 10.4的Firemonkey中。我想构建一个列表视图,其中listview项文本根据列表项内容显示为左对齐或右对齐 我的做法如下: procedure TForm1.FormCreate(Sender: TObject); procedure AddItem(No: integer); var Item: TListViewItem; begin Item := ListView1.Items.AddItem(No); Item.Text

在Delphi 10.4的Firemonkey中。我想构建一个列表视图,其中listview项文本根据列表项内容显示为左对齐或右对齐

我的做法如下:

procedure TForm1.FormCreate(Sender: TObject);

  procedure AddItem(No: integer);
  var
    Item: TListViewItem;
  begin
    Item := ListView1.Items.AddItem(No);
    Item.Text := 'Text item No ' + No.ToString;
    Item.Tag := No;
    if No mod 2 = 0 then
      Item.Objects.TextObject.TextAlign := TTextAlign.Leading
    else
      Item.Objects.TextObject.TextAlign := TTextAlign.Trailing;
  end;

var
  c: integer;
begin
  for c := 0 to 9 do
    AddItem(c);
end;
但是,这并不适用于所有平台。但是,一旦ListView更改其大小,所有ListItems都会在左侧齐平显示。有更好的方法吗

作为解决方法,我已完成以下工作:

procedure TForm1.ListView1Resized(Sender: TObject);
var
  c: integer;
begin
  for c := 0 to ListView1.ItemCount - 1  do
    if ListView1.Items[c].Tag mod 2 = 0 then
      ListView1.Items[c].Objects.TextObject.TextAlign := TTextAlign.Leading
    else
      ListView1.Items[c].Objects.TextObject.TextAlign := TTextAlign.Trailing;
end;

使用
ItemAppearance=ListItem
无法解决此问题,因为在内部
ResetView
方法中,
Item.Objects.TextObject
所有属性都将写回
ItemAppearanceObjects.ItemObjects

因此,对于此应用程序,
ItemAppearance
必须设置为
dynamicapaperance
。两个
TextObjectAppearance
对象必须在结构视图中的
ListView.ItemAppearance.Item
下手动创建,其中
Text1
必须设置为
TextAlign=Leading
Text2
TextAlign=training

之后,只需用文本填充一个文本对象:

procedure TForm1.FormCreate(Sender: TObject);

  procedure AddItem(No: integer);
  var
    Item: TListViewItem;
  begin
    Item := ListView1.Items.AddItem(No);
    if No mod 2 = 0 then
      Item.Data['Text1'] := 'Text item No ' + No.ToString
    else
      Item.Data['Text2'] := 'Text item No ' + No.ToString
  end;

var
  c: integer;
begin
  for c := 0 to 9 do
    AddItem(c);
end;
以下是相应的FMX文件:

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  OnCreate = FormCreate
  DesignerMasterStyle = 0
  object ListView1: TListView
    ItemAppearanceClassName = 'TDynamicAppearance'
    ItemEditAppearanceClassName = 'TDynamicAppearance'
    HeaderAppearanceClassName = 'TListHeaderObjects'
    FooterAppearanceClassName = 'TListHeaderObjects'
    Align = Client
    Size.Width = 640.000000000000000000
    Size.Height = 480.000000000000000000
    Size.PlatformDefault = False
    TabOrder = 0
    ItemAppearanceObjects.ItemObjects.ObjectsCollection = <
      item
        AppearanceObjectName = 'Text1'
        AppearanceClassName = 'TTextObjectAppearance'
        Appearance.TextAlign = Leading
      end
      item
        AppearanceObjectName = 'Text2'
        AppearanceClassName = 'TTextObjectAppearance'
        Appearance.TextAlign = Trailing
      end>
    ItemAppearanceObjects.ItemEditObjects.ObjectsCollection = <
      item
        AppearanceObjectName = 'Text1'
        AppearanceClassName = 'TTextObjectAppearance'
      end>
  end
end
对象格式1:t格式1
左=0
Top=0
标题='Form1'
ClientHeight=480
ClientWidth=640
FormFactor.Width=320
FormFactor.Height=480
FormFactor.Devices=[桌面]
OnCreate=FormCreate
DesignerMasterStyle=0
对象列表视图1:TListView
ItemAppearanceClassName='TDynamicAppearance'
ItemEditAppearanceClassName='TDynamicAppearance'
HeaderAppearanceClassName='tListHeaderObject'
FooterAppearanceClassName='tListHeaderObject'
Align=客户端
Size.Width=640.000000000000000000000000
大小.高度=480.000000000000000000000000
Size.PlatformDefault=False
TabOrder=0
ItemAppearanceObjects.ItemObjects.ObjectsCollection=<
项目
AppearanceObjectName='Text1'
AppearanceClassName='TTextObjectAppearance'
外观.TextAlign=前导
结束
项目
AppearanceObjectName='Text2'
AppearanceClassName='TTextObjectAppearance'
Appearance.TextAlign=training
结束>
ItemAppearanceObjects.ItemEditObjects.ObjectsCollection=<
项目
AppearanceObjectName='Text1'
AppearanceClassName='TTextObjectAppearance'
结束>
结束
结束

我认为最好完全自定义ListViewItem。你可以放置一个TLayout、TRectangle或TText,然后做你想做的事情,结果在所有的平台上都是一样的,比如两人聊天。当您只需要一列而不需要标题时,为什么还要使用
TListView
TRichEdit
难道不是更好的选择吗,因为它还允许用户选择文本的某些部分将其复制到剪贴板?是的,我构建了一个简单的聊天室,用于测试和演示FB4D开源库中即将推出的Firestore listener@Bosshoss:是的,这可能是最好的解决方案,但是这个控件需要的代码可能比整个演示应用程序要多。@AmigoJack:要使用richedit,您可能是一个解决方案,但我需要一个简短的演示来单击“编辑和删除”功能的消息。如果我想在将来使用发送者的配置文件映像扩展示例,则TListView或TListBox更合适。