Алгоритмы быстрого макета для UI - PullRequest
1 голос
/ 11 июля 2020

У меня есть ряд элементов пользовательского интерфейса, таких как панели, поля редактирования, кнопки, ярлыки и т. Д. c. поэтому панели содержат другие панели, которые содержат поля ввода, редакторы и так далее. Большинство элементов можно редактировать и / или изменять размер, что означает, что всякий раз, когда я что-либо меняю, многие смежные элементы пользовательского интерфейса должны изменять свою ширину, высоту и положение x / y на панели. Он отлично работает с небольшим количеством элементов, но невероятно медленно, когда количество элементов составляет тысячи. Есть ли алгоритм быстрого макета, который можно использовать в этом случае? Обратите внимание, что я не могу использовать какие-либо существующие менеджеры компоновки и должен придумать свою собственную реализацию.

1 Ответ

1 голос
/ 31 июля 2020

Я бы посоветовал взять лист из учебника Android, иметь большую «сетку» и сохранить все размеры в модульных кратных - это избавит вас от необходимости каждый раз решать проблему с рюкзаком!

Для Например, вместо кнопки шириной 80 и высотой 40 вы сохраняете ее как метаданные как {2: 1} (при условии, что ваша сетка макета составляет 40 ^ 40 квадратов).

Таким образом, если вы иметь рабочую панель с пространством, скажем, {2:12}, она может быть заполнена двумя объектами размером {2: 6} или, может быть, 3 размером {2: 4}.

Довольно просто fit-to-max, так как любое доступное пространство можно просто увеличить (скажем, вы удаляете элемент {1: 1}, вы можете просто расширить соседний, чтобы занять пространство и c - вы, конечно, можете создать свой собственные правила относительно того, могут ли объекты масштабироваться в одном направлении и т. д. c.

Другое преимущество этого подхода состоит в том, что вы можете легко управлять экранами разных размеров и разрешений, сохраняя при этом ту же структуру и внешний вид. * 100 9 *

...