Кнопка скрывает за собой другие элементы при нажатии

#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 — самый быстрый, но неэлегантный и не очень эффективный (но все же для двух кнопок это не будет заметно)