Android LinearLayout:在LinearLayout周围添加带有阴影的边框

171

我想要创建一个和这个LinearLayout示例一样的边框:

enter image description here

在这个示例中,我们可以看到LinearLayout的边框不是完全相同的。 我如何使用XML可绘制文件来创建这个效果?

目前,我只能创建一个简单的四周都有边框的LinearLayout, 就像这样:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <corners
      android:radius="1dp"
      android:topRightRadius="0dp"
      android:bottomRightRadius="0dp"
      android:bottomLeftRadius="0dp" />
  <stroke
      android:width="1dp"
      android:color="#E3E3E1" />

  <solid android:color="@color/blanc" />

</shape>

1
你可以使用 background 属性来实现这个功能...创建一个形状为矩形、颜色和阴影效果的 XML 文件,并将其设置为线性布局的背景。 - Pragnesh Ghoda シ
请使用虚线来实现灰色边框和填充效果。 - Pragnesh Ghoda シ
我认为,它有两个布局 XML 文件,一个是线性布局,另一个是相对布局,内部带填充。 - Giru Bhai
1
另一种方法是使用9 patch图像作为布局的背景。这将允许实现非常平滑、渐变的阴影效果(在我看来更加逼真)。 - Phantômaxx
请查看我在这里对同一问题的回答:https://dev59.com/zWAf5IYBdhLWcg3wOQcL#34274763 - Ethan
显示剩余2条评论
14个回答

3
我知道现在有点晚了,但这可能对某些人有帮助。
您可以使用ConstraintLayout并在xml中添加以下属性:
        android:elevation="4dp"

2
Ya Mahdi aj---用于RelativeLayout
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <gradient
                android:startColor="#7d000000"
                android:endColor="@android:color/transparent"
                android:angle="90" >
            </gradient>
            <corners android:radius="2dp" />
        </shape>
    </item>

    <item
        android:left="0dp"
        android:right="3dp"
        android:top="0dp"
        android:bottom="3dp">
        <shape android:shape="rectangle">
            <padding
                android:bottom="40dp"
                android:top="40dp"
                android:right="10dp"
                android:left="10dp"
                >
            </padding>
            <solid android:color="@color/Whitetransparent"/>
            <corners android:radius="2dp" />
        </shape>
    </item>
</layer-list>

1
我发现了解决这个问题的最佳方法。
  1. 您需要在布局上设置一个实心矩形背景。

  2. 使用此代码 - ViewCompat.setElevation(view , value)

  3. 在父布局上设置android:clipToPadding="false"


2
如果你不知道的话,这是ViewCompat类上ViewCompat.setElevation()方法的当前实现:public void setElevation(View view, float elevation) {}。正如你所看到的,它还没有被实现。我真的怀疑它是否有任何帮助,并且真的想知道你是否测试过自己的答案,哈哈。 - mradzinski
ViewCompat.setElevation(view, value) 已经生效并解决了我的问题。我正在编写适用于最低 API 级别 16 的代码。 - Yunus Emre INCE

0
只需在您的元素中添加以下内容: 其中android:translationZ="5dp"最为重要。
<LinearLayout 
android:background="@drawable/rounded_background"
android:translationZ="5dp"></LinearLayout>

@drawable/rounded_background.xml 文件代码:

<?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="#fef8f0"/>
        <corners android:radius="10dp" />
    </shape>
</item>
</layer-list>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接