Что такое margin и inset в Android
Что проверяют
Различаете ли вы отступы вёрстки и системные вставки. Вопрос звучит просто, но за ним стоит режим edge-to-edge: умеете ли вы разложить, кто отвечает за расстояние между вьюхами, кто за поля внутри вьюхи и кто за зону под системными панелями.
Как отвечать
Margin это внешний отступ, свойство параметров разметки ребёнка, которое читает родитель. Сама вьюха про него не знает и в нём не рисует, а если контейнер не поддерживает MarginLayoutParams, отступ будет просто проигнорирован. Padding, в отличие от margin, принадлежит самой вьюхе: он внутри её границ, закрашивается фоном и входит в размер при wrap_content.
Insets про другое: это области экрана, занятые системой. Строка состояния и панель навигации, вырез камеры, клавиатура, зоны жестов. Приложение получает их объектом WindowInsets, обычно через ViewCompat.setOnApplyWindowInsetsListener, и превращает в padding нужной вьюхи. В Compose ту же роль играют WindowInsets.safeDrawing и модификаторы вставок.
Связь такая: margin и padding задаёте вы, они статичны, а вставки приходят от системы и меняются на ходу, когда открывается клавиатура или поворачивается устройство. В свежих версиях системы приложение по умолчанию рисует под панелями, поэтому обработка вставок перестала быть опцией.
Где спотыкаются
Отвечают, что inset это просто другое название padding. Это разные вещи: padding вы пишете в разметке, вставки сообщает система, и захардкоженная высота строки состояния разъезжается на устройствах с вырезом и при жестовой навигации.
Ставят fitsSystemWindows всюду. Атрибут обрабатывает вставки в одном месте и потребляет их, из-за чего вложенные вьюхи получают нули, а нижняя часть экрана остаётся без отступа.
Применяют нижнюю вставку к контейнеру со списком. Отдавать её надо самому списку вместе с clipToPadding в значении false, иначе содержимое обрезается у края и последний элемент прячется под панелью навигации.