А
Примерно так, из исходного списка:
Создали вложенный горизонтальный линеар1, добавляем в него дочерние элементы из списка пока суммарная их желаемая ширина в пикселях не превысит ширину родителя; как превысила - добавляем элементы в следующие.
При удалении/добавлении проще все сначала пересчитать чем разницу (ну потом можно будет и норм сделать)