Закрытие теневой кнопки с плавающей кнопкой при просмотре полей
У меня есть кнопка с плавающим действием, привязанная к нижней правой части макета координатора. Это 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 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>