#android
#Android
Вопрос:
Я работаю над пользовательским интерфейсом своего проекта, в частности, я нахожусь в составном представлении, расширяющем FrameLayout. Внутри него у меня есть две кнопки, одна (меньшая) поверх другой (большей). Мне удалось сделать так, чтобы меньшая кнопка всегда была сверху с помощью свойства «android: elevation». Проблема в том, что когда я запускаю приложение и нажимаю на большую кнопку, она скрывает меньшую за ней, несмотря на то, что имеет более низкое свойство высоты. Я хочу, чтобы меньший всегда был сверху, даже если пользователь нажимает на другую кнопку, но мне не удается заставить его работать.
Вот xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="0dp"
android:layout_margin="0dp">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:insetTop="0dp"
android:insetBottom="0dp"/>
<Button
android:layout_width="20dp"
android:layout_height="30dp"
android:backgroundTint="@color/black"
android:layout_gravity="bottom|end"
android:insetTop="0dp"
android:insetBottom="0dp"
android:elevation="10dp"/>
</FrameLayout>
Комментарии:
1. пожалуйста, приложите свой xml
Ответ №1:
вы можете попытаться установить translationZ
вместо elevation
этого (или рядом с ним) — translationZ
предназначен для «фиксированной» высоты и elevation
является динамическим, может быть анимирован. обратите внимание, что у каждого Button
есть stateListAnimator
настройка, которая является переопределяющим elevation
параметром в реализации по умолчанию. посмотрите, что он делает ЗДЕСЬ
простой способ исправить это — установить для обоих Button
s android:stateListAnimator="@null"
, но вы потеряете некоторые анимации при щелчке
проще всего было бы иметь один FrameLayout
, внутри двух дополнительных FrameLayout
кнопок и внутри каждого Button
— самый быстрый, но неэлегантный и не очень эффективный (но все же для двух кнопок это не будет заметно)