【问题标题】:Fast layout algorithms for UIUI的快速布局算法
【发布时间】:2020-11-01 08:13:51
【问题描述】:

我有许多 UI 元素,如面板、编辑字段、按钮、标签等。因此面板包含其他面板,其中包含输入字段、编辑器等。大多数元素都是可编辑和/或调整大小的,这意味着每当我更改任何内容时,许多相邻的 UI 元素都应该更改它们在窗格上的宽度、高度和 x/y 位置。它适用于少量元素,但当元素数量为数千时非常慢。 在这种情况下是否可以使用快速布局算法?请注意,我不能使用任何现有的布局管理器,应该提出自己的实现。

【问题讨论】:

  • 你已经尝试了什么?
  • 我尝试了一种明显的蛮力方法,每当我编辑或调整某些内容时都会计算所有内容。
  • 我猜你的“重新计算一切”算法太慢了。看看 HTML+CSS 如何立即为包含数千个元素的网页布局。重新计算所有元素的数量应该(接近)线性。
  • 您使用什么技术?我想如果你不能使用现有的库,你可能会在嵌入式平台上进行低级绘图?
  • 您可能会觉得这很有帮助:stackoverflow.com/questions/6908846/…

标签: algorithm performance user-interface layout


【解决方案1】:

我建议从 Android 剧本中吸取教训,并拥有一个更大的“网格”,并将所有内容的大小保持在模数倍数中 - 这样可以避免您每次都需要解决背包问题!

例如,您可以将其作为元数据存储为 {2:1}(假设您的布局网格为 40^40 方格),而不是使用宽度为 80、高度为 40 的按钮。

这样,如果您有一个空间为 {2:12} 的工作面板,这可能会被两个大小为 {2:6} 的对象或大小为 {2:4} 的 3 个对象填充。

适应最大值也非常简单,因为任何可用空间都可以按比例放大(例如,您删除一个 {1:1} 项目,您可以扩展它旁边的项目以占用空间等 - 您可以当然,围绕对象是否可以单向缩放等创建自己的规则。

这种方法的另一个优点是您可以轻松管理不同的屏幕尺寸和分辨率,同时仍保持相同的框架和外观。

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 2019-03-19
    • 2015-03-12
    • 2012-05-30
    相关资源
    最近更新 更多