Как сделать такую штуку не используя ConstraintLayout? Стрелка должна быть

выровнена по вертикали по центру картинки, подпись снизу - по start картинки.
Напрашивается что-то типа табличного layout, но такого вроде как нет.
Есть другие варианты, кроме ConstraintLayout?

16 ответов

26 просмотров

по-моему идеальный кейс для кастомного лейаута (через Layout функцию), чайлды можно пометить через Modifier.layoutId() чтобы потом при measure/placement их можно было различить

Pavel- Автор вопроса
Dmitry Fabrichny
по-моему идеальный кейс для кастомного лейаута (че...

Oke, я сделал это с кастомным лейаутом и с ручным вычислением координат. Вот что получилось: https://gist.github.com/pavelsidyakin-warnermedia/a7c0192275647856a5a1c3e16a41982f Там же вариант с ConstraintLayout для сравнения. Неужели кастомный лейаут с ручным позиционированием - это трувейнее в композе чем констрейнт? Почему многие так стараются избегать констрейнта? Он же в 100500 раз удобнее и очевиднее, чем это бесконечные column/row/box'ы. Я могу понять ещё совсем простые лейауты, но когда надо выходить за границы column/row/box - тут либо руками вычислять в Layout, либо констрейнт.

Pavel
Oke, я сделал это с кастомным лейаутом и с ручным ...

А почему бы просто не использовать констрейнт? Это ведь очевидно хороший кейс под него, коль элементы должны располагаться относительно друг друга с разнообразными правилами. Его как и использовать, так и избегать нужно к месту. Беда исключительно в том, что констрейнт пришёл сюда из нативной вёрстки, где большая вложенность была проблемой (как с производительностью, так и с юзабилити), а он помогал решить её. В компоузе же вложенность это наоборот — преимущество. Поэтому использовать констрейнт как раньше — например для написания целиком экрана — может стать боком. А вот для отдельных элементов, как в твоём примере, отличное решение.

Pavel- Автор вопроса

Вот

Pavel
Вот

паддинг перед текстом = ширина стрелки? вынести в константы?

Pavel
Вот

Это всё таки не "невозможно", а чуть сложнее, чем с констрейнтом.

Pavel- Автор вопроса
Konstantin Dovnar
Это всё таки не "невозможно", а чуть сложнее, чем ...

Сделайте :) Мне даж интересно как это сделать через Column/Row/Box

Pavel
Сделайте :) Мне даж интересно как это сделать чере...

Я не буду этим сейчас заниматься, но в целом логика сетки должна действовать, единственное надо колдовать над весами, размерами и т.д. Выйдет что-то из разряда: стрекла | картинка ---------------- отступ | подпись Проще ли это чем на констрейнте? Нет.

Konstantin Dovnar
Я не буду этим сейчас заниматься, но в целом логик...

а по-моему проще, даже если по строкам кода считать

Pêcheur
а по-моему проще, даже если по строкам кода считат...

Оно логически сложнее. Надо именно что подбирать, колдовать с размерами. В констейнте ты буквально описываешь словами "Встань по центру картинки, слева". Оно многими воспринимается куда проще и логичнее.

Pavel- Автор вопроса
Arkadii Ivanov
Может LazyVerticalGrid?

Я вот тож думал про что-то типа grid. Смущает только что он вроде как lazy, т.е. заточен под recyclable список. Не будет ли это пушкой по воробьям?

Pavel
Я вот тож думал про что-то типа grid. Смущает толь...

Я бы попробовал, должно быть нормально. Обычный LazyList позволяет одиночные элементы добавлять, может и здесь так можно.

Pavel- Автор вопроса
Konstantin Dovnar
Я не буду этим сейчас заниматься, но в целом логик...

Я привёл упрощённый пример. И специально акцентировал внимание на задании - отцентрировать по центру и по start картинки. Что если к стрелке добавить текст? Можно будет подобрать отступ, но он будет работать для конкретной длины строки и размера шрифта. Не гуд. Что если иконка стрелки поменяется? Опять же этот отступ поедет. Хотя тут не так критично - просто снова надо будет подобрать отступ. В общем, подход с отступами - в целом не надёжен. Констрейт - лучшее что можно тут придумать. Но пока в композе он работает не очень.

Pavel
Я привёл упрощённый пример. И специально акцентиро...

Так, о чём разговор? Я уже сказал — констрейнт в своих ситуациях отлично решает проблемы. Моё утверждение лишь о том, что нет там никакого невозможно.

Похожие вопросы

Обсуждают сегодня

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
14
Карта сайта