在视图边距处浮动动作按钮的阴影剪辑

时间:2015-07-19 23:41:21

标签: android android-layout shadow floating-action-button

我有一个浮动动作按钮,固定在协调器布局的右下角。它距离视图的边距是16dp(默认情况下包含边距并在dimens.xml文件中指定),但它的阴影是剪切并且具有方形外观(见下文)。当我从视图的边缘移动浮动操作按钮到32dp时,其阴影显示正确。

我已尝试设置其高程属性(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 from the margin. FAB 32dp from the margin.

5 个答案:

答案 0 :(得分:28)

问题是父剪裁阴影。查找剪切阴影的父级(不一定是层次结构中的下一个)并将其添加到xml中的视图。

android:clipChildren="false"

我现在正在对此进行测试,删除并将该行添加到裁剪视图的父级,并且工作正常。

添加其他容器或更改边距是我不推荐的解决方法。它太零散了。迷你工厂具有不同的容器尺寸,并且根据API级别(<21或> = 21)需要不同的尺寸。

答案 1 :(得分:9)

有类似的问题。做两件事:

  1. android.support.design.widget.CoordinatorLayout移除android:paddingRight="@dimen/activity_horizontal_margin"android:paddingBottom="@dimen/activity_vertical_margin"

  2. android.support.design.widget.FloatingActionButton添加android:layout_marginRight="@dimen/activity_horizontal_margin"android:layout_marginBottom="@dimen/activity_horizontal_margin"

  3. 由于解释= FAB ddidn没有显示阴影的地方,因此,您还没有完全看到它。

答案 2 :(得分:1)

我也有同样的问题。但为了FAB,我无法丢弃我的保证金值。所以我在层次结构中添加了另一个层,这有助于我将FAB放置在我想要的位置,而不会破坏父级。所以现在CoordinatorLayout内有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> 。以下是我修改后的布局文件。

text = "Nuclear Launch Codes (Levels One/Two)"

答案 3 :(得分:0)

我已将此添加到父级视图中:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a data-foo="1" data-bar="2" href="/somepath?foo=3">Test</a>

答案 4 :(得分:0)

在水平LinearLayout中的两个ExtendedFloatingActionButton时,我遇到了同样的问题,因此这两个按钮可能彼此相邻。灰色阴影仅出现在浮动按钮的底部两个角上,但是我在线性布局上设置了底部边距,因此不确定为什么会出现剪切。

我意识到即使将android:clipChildren="false"添加到LinearLayout中,我的代码仍被包裹在ConstraintLayout中,这意味着按钮仍被切断。

要解决此问题,只需将android:clipChildren="false"添加到父项(在我的情况下为ConstraintLayout)。

我的代码示例:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:clipToPadding="false"
    android:clipChildren="false">
                
    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
            android:id="@+id/btn_one"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="1dp"
            android:text="text" />

        <com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
            android:id="@+id/btn_two"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1.8"
            android:text="text"
            android:textAlignment="center" />
    </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.constraintlayout.widget.ConstraintLayout>