по-моему идеальный кейс для кастомного лейаута (через Layout функцию), чайлды можно пометить через Modifier.layoutId() чтобы потом при measure/placement их можно было различить
Oke, я сделал это с кастомным лейаутом и с ручным вычислением координат. Вот что получилось: https://gist.github.com/pavelsidyakin-warnermedia/a7c0192275647856a5a1c3e16a41982f Там же вариант с ConstraintLayout для сравнения. Неужели кастомный лейаут с ручным позиционированием - это трувейнее в композе чем констрейнт? Почему многие так стараются избегать констрейнта? Он же в 100500 раз удобнее и очевиднее, чем это бесконечные column/row/box'ы. Я могу понять ещё совсем простые лейауты, но когда надо выходить за границы column/row/box - тут либо руками вычислять в Layout, либо констрейнт.
А почему бы просто не использовать констрейнт? Это ведь очевидно хороший кейс под него, коль элементы должны располагаться относительно друг друга с разнообразными правилами. Его как и использовать, так и избегать нужно к месту. Беда исключительно в том, что констрейнт пришёл сюда из нативной вёрстки, где большая вложенность была проблемой (как с производительностью, так и с юзабилити), а он помогал решить её. В компоузе же вложенность это наоборот — преимущество. Поэтому использовать констрейнт как раньше — например для написания целиком экрана — может стать боком. А вот для отдельных элементов, как в твоём примере, отличное решение.
Вот
Это всё таки не "невозможно", а чуть сложнее, чем с констрейнтом.
Сделайте :) Мне даж интересно как это сделать через Column/Row/Box
Я не буду этим сейчас заниматься, но в целом логика сетки должна действовать, единственное надо колдовать над весами, размерами и т.д. Выйдет что-то из разряда: стрекла | картинка ---------------- отступ | подпись Проще ли это чем на констрейнте? Нет.
а по-моему проще, даже если по строкам кода считать
Оно логически сложнее. Надо именно что подбирать, колдовать с размерами. В констейнте ты буквально описываешь словами "Встань по центру картинки, слева". Оно многими воспринимается куда проще и логичнее.
Может LazyVerticalGrid?
Я вот тож думал про что-то типа grid. Смущает только что он вроде как lazy, т.е. заточен под recyclable список. Не будет ли это пушкой по воробьям?
Я бы попробовал, должно быть нормально. Обычный LazyList позволяет одиночные элементы добавлять, может и здесь так можно.
Я привёл упрощённый пример. И специально акцентировал внимание на задании - отцентрировать по центру и по start картинки. Что если к стрелке добавить текст? Можно будет подобрать отступ, но он будет работать для конкретной длины строки и размера шрифта. Не гуд. Что если иконка стрелки поменяется? Опять же этот отступ поедет. Хотя тут не так критично - просто снова надо будет подобрать отступ. В общем, подход с отступами - в целом не надёжен. Констрейт - лучшее что можно тут придумать. Но пока в композе он работает не очень.
Так, о чём разговор? Я уже сказал — констрейнт в своих ситуациях отлично решает проблемы. Моё утверждение лишь о том, что нет там никакого невозможно.
Обсуждают сегодня