Представления в CoordinatorLayout теряют свою позицию, если я изменяю видимость привязки - PullRequest
0 голосов
/ 15 февраля 2020

Контекст

Я пытаюсь создать экран, где у меня есть вид предварительного просмотра внизу экрана, и у меня есть две плавающие кнопки действия , привязанные к этому предварительному просмотру. Все это в CoordinatorLayout . Примерно так:

enter image description here

Красный макет представляет вид предварительного просмотра, а эти два серых квадрата являются плавающими кнопками действий. XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab1"
        app:layout_anchorGravity="top|start"
        android:layout_gravity="bottom"
        app:layout_behavior=".util.ShrinkBehavior"
        app:layout_anchor="@id/previewView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab2"
        app:layout_anchorGravity="top|end"
        android:layout_gravity="bottom"
        app:layout_behavior=".util.ShrinkBehavior"
        app:layout_anchor="@id/previewView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <FrameLayout
        android:layout_gravity="bottom"
        app:layout_anchorGravity="bottom"
        android:background="@android:color/holo_red_dark"
        android:id="@+id/previewView"
        android:layout_width="match_parent"
        android:layout_height="100dp"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

У каждого FAB есть этот набор ShrinkBehavior, который в основном сокращает FAB, когда я отклоняю предварительный просмотр, поэтому оба FAB привязаны к предварительному просмотру. Когда я отклоняю предварительный просмотр, я использую ObjectAnimator, чтобы переместить предварительный просмотр вниз, когда я закончил с анимацией, я установил видимость предварительного просмотра на GONE.

Issue

Как только я установил видимость предварительного просмотра на GONE, оба FAB будут расположены в верхнем левом углу. Раньше я думал, что если я сделаю вид привязки (предварительный просмотр) исчезнувшим, привязанные виды (FAB) по умолчанию будут иметь значение layout_gravity. Я играл со всеми возможными различными комбинациями layout_gravity и layout_anchorGravity.

Обходной путь до сих пор

Единственный способ, которым я смог сохранить FAB выравнивают по нижней части экрана после исчезновения предварительного просмотра, поместив ConstrainLayout в CoordinatorLayout и используя его для выравнивания видов. Но я не совсем уверен, что это правильное решение.

Любой совет? Спасибо,

...