Закрытие теневой кнопки с плавающей кнопкой при просмотре полей

У меня есть кнопка с плавающим действием, привязанная к нижней правой части макета координатора. Это 16dp из полей представления (поля включены по умолчанию и указаны в файле dimens.xml), но его тень обрезается и имеет квадратную форму (см. Ниже). Когда я перемещаю плавающую кнопку действия до 32dp из полей представления, ее тень отображается правильно. Я хотел бы, чтобы кнопка плавающего действия была 16dp с поля и правильно отображала ее тень.

Я попытался установить его атрибут возвышения (android:elevation="5dp"), но это, похоже, не влияет. Я также попытался установить атрибут borderWidth равным 0 (app:borderWidth="0dp"), но это также не имело эффекта.

Есть ли причина, по которой действует кнопка с плавающим действием?

XML

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/create_floating_action_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_create_white_48dp"
        app:layout_anchor="@id/coordinator_layout"
        app:layout_anchorGravity="bottom|right" />

</android.support.design.widget.CoordinatorLayout>

Изображения

FAB 16dp с поля. FAB 32dp с поля.

Ответы

Ответ 1

Проблема заключается в родительском отсечении тени. Найдите родителя, который обрезает тень (не обязательно следующий в иерархии) и добавьте это в представление в xml.

android:clipChildren="false"

Я тестировал это прямо сейчас, удаляя и добавляя эту строку к родительскому объекту, который обрезал представление и работает нормально.

Добавление других контейнеров или изменение полей является обходным решением, которое я не рекомендую. Это слишком неоднородно. Мини-фабрики имеют разные размеры контейнеров и требуют разных размеров в зависимости от уровня API (< 21 или >= 21).

Ответ 2

Имел подобную проблему. Сделайте 2 вещи:

  • В android.support.design.widget.CoordinatorLayout удалите android:paddingRight="@dimen/activity_horizontal_margin" и android:paddingBottom="@dimen/activity_vertical_margin"

  • В android.support.design.widget.FloatingActionButton добавить android:layout_marginRight="@dimen/activity_horizontal_margin" и android:layout_marginBottom="@dimen/activity_horizontal_margin"

Как объяснение = FAB ddidn't имеет место для отображения тени, и из-за этого вы не видели его полностью.

Ответ 3

У меня тоже была такая же проблема. Но я не мог просто выбросить свои значения маржи ради FAB. Поэтому я добавил еще один уровень в иерархии, и это помогло мне разместить FAB именно там, где я хотел, не нарушая родителя. Итак, теперь у меня есть CoordinatorLayout внутри a CoordinatorLayout для FAB. Ниже приведен измененный файл макета.

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/ddd"
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="@drawable/tile"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/fff"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ScrollView
            android:id="@+id/scroll_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <!-- All my views under a LinearLayout parent -->

        </ScrollView>

    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fabAdd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="Add Text"
        android:visibility="visible"
        android:layout_margin="10dp"
        app:backgroundTint="@color/primary"
        app:layout_anchor="@+id/fff"
        app:layout_anchorGravity="bottom|right|end"/>

</android.support.design.widget.CoordinatorLayout>