如何只为按钮添加底部阴影

How to add only bottom shadow for buttons

我有三个按钮被拉伸到整个 window。对于所有这些按钮,我只需要为底部添加阴影。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

 <LinearLayout
     android:id="@+id/buttons_layout"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     >

    <ImageButton
        android:id="@+id/gath"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/ic_gath"
        android:background="@drawable/button_shadow"
        android:layout_marginTop="40dp"
        />

    <ImageButton
        android:id="@+id/foll"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/ic_foll"
        android:background="@drawable/button_shadow"
        android:layout_marginTop="40dp"
         />

    <ImageButton
        android:id="@+id/del"
        android:layout_width="0dp"
        android:layout_height="35dp"
        android:layout_weight="1"
        app:srcCompat="@drawable/ic_del"
        android:background="@drawable/button_shadow"
        android:layout_marginTop="40dp"
        />
 </LinearLayout>
</RelativeLayout>

我将图层列表划分为两部分:1) 按钮的主要背景色和 2) 渐变

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape android:shape="rectangle">
          <solid android:color="@color/colorPrimary"/>
          <size android:height="30dp"/>
    </shape>
</item>
<item>
    <shape android:shape="rectangle">
        <gradient
            android:startColor="#0000"
            android:endColor="#9444"
            android:type="linear"
            android:angle="90">
        </gradient>
        <size android:height="5dp"/>
    </shape>
</item>
</layer-list>

现在我只看到 colorPrimary(主背景色),没有别的。我试图使用高程但无法删除右侧和左侧阴影。

谢谢珍妮弗。他找到了完美的解决方案。我找到了类似的解决方案:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:left="0dp"
        android:right="0dp"
        android:top="30dp"
        android:bottom="0dp">
        <shape android:shape="rectangle">
            <gradient
                android:startColor="#0000"
                android:endColor="#9444"
                android:type="linear"
                android:angle="90">
            </gradient>
        </shape>

    </item>
        <item
            android:left="0dp"
            android:right="0dp"
            android:top="0dp"
            android:bottom="5dp">
            <shape android:shape="rectangle">
                <solid android:color="@color/colorAccent"/>
            </shape>
        </item>
</layer-list> 

我建议你搜索一些库来绘制所有 API 级别的阴影。我使用 this one 为我的阴影着色并使它们仅在我的视野下方。您可以根据需要进行更改。

try this..

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true">
        <layer-list>
            <item android:top="-10dp" android:left="-10dp" android:right="-10dp">
                <shape android:shape="rectangle">

                    <gradient
                        android:angle="90" 
                        android:startColor="#FF000000"
                        android:type="linear" />

                    <corners android:radius="5dp" />

                    <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
                </shape>
            </item>
        </layer-list>
    </item>
</selector>

And for Button..

<ImageButton
            android:id="@+id/gath"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_marginTop="40dp"
            android:layout_weight="1"
            android:background="@drawable/tiles"
            app:srcCompat="@drawable/ic_del"  />

我认为对您来说最简单的方法是将 button_shadow.xml 更改为如下内容:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <size android:height="30dp" />
            <solid android:color="#FFFF0000" />
        </shape>
    </item>
    <item android:top="30dp">
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <size android:height="5dp" />
            <solid android:color="#FF000000" />
            <gradient
                android:angle="90"
                android:endColor="#FF888888"
                android:startColor="#FF000000"
                android:type="linear" />
        </shape>
    </item>
</layer-list>

您可以尝试渐变开始和结束颜色。如果您的 ImageButton 设置为 35dp 的总高度,而 button_shadow.xml 中的 android:top 设置为 30dp,则它将以 5dp 的总高度显示。根据开始和结束颜色,您可以使它看起来像阴影从按钮下方开始一点点,或坚持下去。

在我的虚拟设备上现在看起来像这样: