如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?

Posted

技术标签:

【中文标题】如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?【英文标题】:How can i do autosize item height in listview for variable multirow long text with word wrap? 【发布时间】:2015-04-20 15:01:09 【问题描述】:

(德尔福 Firemonkey 平台)

例如

和我的列表视图

可以通过带有 (word wrap/true) 和 (trimming/none) 选项的 listview/itemappearance/item/text 进行自动换行,但不能自动调整行高或适合高度。

【问题讨论】:

您的源代码可以帮助我们找到答案。可以发一下吗? 您好,没有代码,但例如s1378.photobucket.com/user/moorkerg/media/… 和我的列表视图s1378.photobucket.com/user/moorkerg/media/… 你找到解决办法了吗? 【参考方案1】:

我使用 Delphi 10.3 并创建自己的 ListItems。 在 ListView1UpdatingObjects 上,当我使用 WardWrap:=True 创建 ListViewText 并用文本填充它然后执行此操作

function GetTextHeight(const D: TListItemText; const Width: single; const 
Text: string): Integer;
var
  Layout: TTextLayout;
begin
  Layout := TTextLayoutManager.DefaultTextLayout.Create;
  try
    Layout.BeginUpdate;
    try
      Layout.Font.Assign(D.Font);
      Layout.VerticalAlign := D.TextVertAlign;
      Layout.HorizontalAlign := D.TextAlign;
      Layout.WordWrap := D.WordWrap;
      Layout.Trimming := D.Trimming;
      Layout.MaxSize := TPointF.Create(Width, 
                      TTextLayout.MaxLayoutSize.Y);
      Layout.Text := Text;
    finally
      Layout.EndUpdate;
    end;
    Result := Round(Layout.Height);
    Layout.Text := 'm';
    Result := Result + Round(Layout.Height);
  finally
    Layout.Free;
  end;
end;

然后这样称呼它

LText.Height := GetTextHeight(LText, LText.Width, LText.Text);

【讨论】:

以上是关于如何在列表视图中为带有自动换行的可变多行长文本自动调整项目高度?的主要内容,如果未能解决你的问题,请参考以下文章

UITableview 自动换行长文本

使用 vuetify、flexbox 和列表进行自动换行

如何在 VB.NET 中为基于 Windows 的应用程序创建带有自动建议的文本框?

在 Java 中使用 hasNext 创建可变长度的自动换行

EXCEL表格设定宽度以后,文字填满了如何自动换行

有没有办法在 div 中自动换行长单词?