#android #android_layout
У меня есть FrameLayout в который я кладу Button и FrameLayout с целью перекрыть изображением (будущей анимацией, поэтому и FrameLayout) кнопку. Предпросмотр все отображает верно: Однако, при запуске кнопка перекрывает "FrameLayout": Вот разметка:Почему Button перекрывает FrameLayout (хотя с аналогичной... конструкцией, в этой же разметке, такого не было. И как все же расположить FrameLayout поверх Button?
Ответы
Ответ 1
Вся соль здесь в таком атрибуте кнопки как android:elevation. Кнопка в API > 21 имеет такой атрибут android:stateListAnimator, который по умолчанию ссылается на файл button_state_list_anim_material.xml со следующим содержанием: ...- ... Видим что в обычном state_enabled-состоянии атрибут elevation имеет значение @dimen/button_elevation_material, которое равно 2dp. Вывод: если мы хотим что бы какое то view перекрывало кнопку, необходимо для него(view!) использовать android:elevation >= 2dp.
Ответ 2
Оберните кнопку и фрейм дополнительно отдельными лайатуами, я уже у себя ловил такой баг, когда поверх Button на андройде 5.0 и выше вью которая должна была рисоваться поверх не было видно. Пока не добрался до причины, но костыльно решено было вот так.Возможно только что, до меня дошло... AppCompat переопределяет во вью при создании стандартные виджеты и ставит свои (AppCompatButton, AppCompatTextView и др. - замечал при дебаге), так как они удаляют и добавляют, виджет Button будет иметь индекс больше чем FrameLayout, а соответственно выше по иерархии и в итоге после всех этих махинаций гугла - виджет Button лежит по верх всего остального в общем контейнере. Поправьте меня в комментарии, если это бред.
Комментариев нет:
Отправить комментарий