CoordinatorLayout с двумя плавающими кнопками действий

У меня есть два Fab, расположенных внутри представления CoordinateLayout. Когда я показываю Snackbar, я ожидаю, что два Fab поднимаются все вместе, но в результате только один Fab (нижний) откликается и поднимается (см. Рисунок). что мне здесь не хватает?

berfore введите здесь описание изображения после  введите описание изображения здесь

Вызов закусочной

 mSnackbar = Snackbar.make(getActivity().findViewById(R.id.coords_wrapper), "Loading", 1000000000);   

XML

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/coords_wrapper">

    <!-- main contents here, left out -->
    <Relativelayout ...... />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/action_button_location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src ="@drawable/ic_add_black"
        android:layout_gravity="right|bottom"
        android:layout_marginBottom="82dp"
        android:layout_marginRight="16dp"
        app:borderWidth="0dp"
        app:elevation="6dp"
        />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/action_button_filter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src ="@drawable/ic_add_black"
        android:layout_gravity="right|bottom"
        android:layout_margin="16dp"
        app:borderWidth="0dp"
        app:elevation="6dp"
        />
</android.support.design.widget.CoordinatorLayout>



Ответы (1)


Согласно Behavior фабрики, он переводится только в том случае, если в противном случае он пересекал бы закусочную. Верхняя кнопка явно не задевает закусочную, поэтому ничего не происходит.

Вы можете попробовать определить привязку:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/action_button_location"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    app:layout_anchor="@id/action_button_filter"
    app:layout_anchorGravity="top"
    android:layout_gravity="top"
    />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/action_button_filter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src ="@drawable/ic_add_black"
    android:layout_gravity="right|bottom"
    android:layout_margin="16dp"
    />

Это будет определять отношение между верхней фабрикой (action_button_location) и нижней фабрикой (action_button_filter), так что первая всегда остается поверх другой, как определено с помощью атрибутов layout_anchorGravity и layout_gravity, оба установлены в top. Возможно, вам придется пересмотреть свои поля.

person natario    schedule 15.08.2015
comment
Я думаю, что action_button_filter необходимо определить до action_button_location, чтобы иметь возможность использовать его в качестве привязки. Также мне нужно было использовать anchorGravity right | top. И включите layout_marginBottom = 82dp (чтобы они не касались друг друга) - person David Ameller; 20.10.2017