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

我想创建与这个 LinearLayout 相同的边框作为示例:

enter image description here

在这个示例中,我们可以看到线性布局周围的边框并不完全相同。 如何使用 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>
332456 次浏览

试试这个。

<?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="#CABBBBBB"/>
<corners android:radius="2dp" />
</shape>
</item>


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

作为一个替代方案,你可以使用一个9补丁图片作为布局的背景,允许更多的“自然”阴影:

enter image description here

结果:

enter image description here

将图像放在 /res/drawable文件夹中。
确保文件扩展名是 .9.png,而不是 .png

顺便说一下,这是对 API 19 sdk 资源文件夹中现有资源的修改(减少到最小平方大小)。
我留下了红色的标记,因为它们看起来没有什么害处,正如 Draw9patch 工具所显示的那样。

[编辑]

大概9块,以防你跟他们没关系。

只需添加它作为视图的背景。

黑色标记的区域(左边和顶部)将会延伸(垂直的,水平的)。
黑色标记的区域(右下)定义了“内容区域”(在这里可以添加文本或视图——如果你愿意,你可以将未标记的区域称为“填充”)。

教程: http://radleymarx.com/blog/simple-guide-to-9-patch/

好吧,我知道这太迟了,但我也有同样的要求,我就这样解决了

1. 首先在“ draable”中创建一个 xml 文件(例如: orders _ Shadow.xml) 文件夹并将下面的代码复制到其中。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >


<item>
<shape>
<!-- set the shadow color here -->
<stroke
android:width="2dp"
android:color="#7000" />


<!-- setting the thickness of shadow (positive value will give shadow on that side) -->


<padding
android:bottom="2dp"
android:left="2dp"
android:right="-1dp"
android:top="-1dp" />


<corners android:radius="3dp" />
</shape>
</item>


<!-- Background -->


<item>
<shape>
<solid android:color="#fff" />
<corners android:radius="3dp" />
</shape>
</item>


</layer-list>

现在在你想要阴影的布局上(例如: LinearLayout)添加 android: back

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="8dip"
android:background="@drawable/border_shadow"
android:orientation="vertical">

这对我很管用。

我得到最好看的结果使用9补丁图形。

您只需使用以下编辑器创建一个独立的9补丁图形: Http://inloop.github.io/shadow4android/

例如:

9款补丁图片:

The 9 patch graphic:

结果是:

enter image description here

来源:

<LinearLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:background="@drawable/my_nine_patch"

这就是 CardView 存在的原因
它只是一个 FrameLayout,支持前棒棒糖设备的升级。

<android.support.v7.widget.CardView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:cardUseCompatPadding="true"
app:cardElevation="4dp"
app:cardCornerRadius="3dp" >


<!-- put whatever you want -->


</android.support.v7.widget.CardView>

要使用这种方法,需要向 build.gradle添加依赖项:

compile 'com.android.support:cardview-v7:23.+'

这很简单:

创建一个可绘制的文件,其渐变如下:

为阴影以下的视图 below_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#20000000"
android:endColor="@android:color/transparent"
android:angle="270" >
</gradient>
</shape>

视图 above_shadow.xml上的阴影

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#20000000"
android:endColor="@android:color/transparent"
android:angle="90" >
</gradient>
</shape>

以此类推,左右阴影只需改变渐变的角度即可:)

在可绘制的名称 drop _ shadow. xml 中创建一个 file. xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--<item android:state_pressed="true">
<layer-list>
<item android:left="4dp" android:top="4dp">
<shape>
<solid android:color="#35000000" />
<corners android:radius="2dp"/>
</shape>
</item>
...
</layer-list>
</item>-->
<item>
<layer-list>
<!-- SHADOW LAYER -->
<!--<item android:top="4dp" android:left="4dp">
<shape>
<solid android:color="#35000000" />
<corners android:radius="2dp" />
</shape>
</item>-->
<!-- SHADOW LAYER -->
<item>
<shape>
<solid android:color="#35000000" />
<corners android:radius="2dp" />
</shape>
</item>
<!-- CONTENT LAYER -->
<item android:bottom="3dp" android:left="1dp" android:right="3dp" android:top="1dp">
<shape>
<solid android:color="#ffffff" />
<corners android:radius="1dp" />
</shape>
</item>
</layer-list>
</item>
</selector>

然后:

<LinearLayout
...
android:background="@drawable/drop_shadow"/>

Ya Mahdi aj ——-用于相对布局

<?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. 您需要在布局上设置一个实心的矩形背景。

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

  3. 在父布局集 android:clipToPadding="false"

使用这一行,希望你能达到最好的效果;

用途: android:elevation="3dp"根据需要调整大小,这是实现阴影效果的最佳和最简单的方法,比如按钮和其他默认的安卓阴影效果。 如果成功了就告诉我!

如果你已经有了形状的边框,只需添加高度:

<LinearLayout
android:id="@+id/layout"
...
android:elevation="2dp"
android:background="@drawable/rectangle" />

我知道现在很晚了,但也许能帮到别人。

您可以使用 straintLayout 并在 xml 中添加以下属性,

        android:elevation="4dp"

1. 首先在“ draable”文件夹中创建一个 xml 文件名 Shadow.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="#CABBBBBB" />
<corners android:radius="10dp" />
</shape>
</item>


<item
android:bottom="6dp"
android:left="0dp"
android:right="6dp"
android:top="0dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="4dp" />
</shape>
</item>
</layer-list>

然后在 LinearLayout 中添加层列表作为背景。

<LinearLayout
android:id="@+id/header_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shadow"
android:orientation="vertical">