Если вы запустите эту раскладку на нескольких телефонах, вы заметите, что «плохое» поведение (кнопки появляются, даже если они «покрыты» линейной раскладкой) будет иметь место только на телефонах с Android Lollipop или новее.
В Lollipop введено понятие «высота», и все кнопки в Lollipop + имеют высоту по умолчанию. Нажатие на одну из этих кнопок также увеличивает высоту на время нажатия (поэтому кажется, что тень, которую отбрасывает кнопка на фоне, увеличивается).
Возвышение работает так же, как в реальном мире; вещи с более высоким возвышением появляются над вещами с более низким возвышением. Ваш линейный макет не определяет значение высоты, и линейные макеты не имеют высоты по умолчанию, поэтому его высота составляет 0dp
. Кнопка в состоянии по умолчанию по умолчанию имеет высоту 2dp
. Пока высота кнопки больше линейного макета, кнопка будет отображаться «впереди» линейного макета.
Простым решением было бы добавление большого количества возвышений в линейный макет:
android:elevation="12dp"
У этого могут быть другие побочные эффекты, но, возможно, это будет работать только для вас.