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

waw*_*los 138 android border android-linearlayout

我想创建此LinearLayout的相同边框作为示例:

在此输入图像描述

在这个例子中,我们可以看到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>
Run Code Online (Sandbox Code Playgroud)

Har*_*ran 239

试试这个..

<?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>
Run Code Online (Sandbox Code Playgroud)

  • 我也建议你这样做,你可以在你的`<shape>`中使用`<gradient>`来增强边框效果,如果它真的是你的UI需要的效果而不仅仅是纯色边框. (3认同)
  • @wawanopoulos在Hariharan的回答中用"1dp"替换"0dp"`. (2认同)

小智 79

这就是CardView存在的原因.CardView | Android开发者
它只是一个支持前棒棒糖设备提升的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>
Run Code Online (Sandbox Code Playgroud)

要使用它,您需要将依赖项添加到build.gradle:

compile 'com.android.support:cardview-v7:23.+'
Run Code Online (Sandbox Code Playgroud)


fun*_*der 57

我使用9补丁图形获得了最佳效果.

您可以使用以下编辑器创建单独的9补丁图形:http: //inloop.github.io/shadow4android/

例:

9补丁图:

9补丁图:

结果:

在此输入图像描述

来源:

<LinearLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:background="@drawable/my_nine_patch"
Run Code Online (Sandbox Code Playgroud)


use*_*170 34

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

1.首先在"drawable"文件夹中创建一个xml文件(例如:border_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>
Run Code Online (Sandbox Code Playgroud)

2.现在你想要阴影的布局(例如:LinearLayout)在android:background中添加它

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dip"
    android:background="@drawable/border_shadow"
    android:orientation="vertical">
Run Code Online (Sandbox Code Playgroud)

这对我有用.


Mor*_*goo 21

这很简单:

使用如下渐变创建一个可绘制文件:

对于视图下方的阴影 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>
Run Code Online (Sandbox Code Playgroud)

对于视图上方的阴影 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>
Run Code Online (Sandbox Code Playgroud)

对于左右阴影等等只是改变渐变的角度:)


Fan*_*mas 18

作为替代方案,您可以使用9补丁图像作为布局的背景,允许更多"自然"阴影:

在此输入图像描述

结果:

在此输入图像描述

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

顺便说一下,这是在API 19 sdk resources文件夹中找到的现有资源的修改(缩小到最小平方大小).
我留下了红色标记,因为它们似乎没有害处,如draw9patch工具中所示.

[编辑]

大约9个补丁,如果你从未与他们有任何关系.

只需将其添加为视图的背景即可.

黑色标记区域(左侧和顶部)将伸展(垂直,水平).
黑色标记区域(右侧,底部)定义"内容区域"(可以添加文本或视图的位置 - 如果您愿意,可以将未标记区域称为"填充").

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


Anh*_*Duy 10

使用名称drop_shadow.xml在drawable中创建文件.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>
Run Code Online (Sandbox Code Playgroud)

然后:

<LinearLayout
...
android:background="@drawable/drop_shadow"/>
Run Code Online (Sandbox Code Playgroud)


Sud*_*ngh 6

1.首先在“drawable”文件夹中创建一个名为shadow.xml的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>
Run Code Online (Sandbox Code Playgroud)

然后将图层列表添加为 LinearLayout 中的背景。

<LinearLayout
        android:id="@+id/header_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/shadow"
        android:orientation="vertical">
Run Code Online (Sandbox Code Playgroud)