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

Android LinearLayout:在LinearLayout周围添加带阴影的边框,android,border,android-linearlayout,Android,Border,Android Linearlayout,我希望创建与示例相同的线性布局边界: 在本例中,我们可以看到线性布局周围的边界并不相同。 如何使用XML可绘制文件创建此文件 目前,我只能在线性布局周围创建一个简单的边框,如下所示: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners

我希望创建与示例相同的线性布局边界:

在本例中,我们可以看到线性布局周围的边界并不相同。 如何使用XML可绘制文件创建此文件

目前,我只能在线性布局周围创建一个简单的边框,如下所示:

<?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>

试试这个

<?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面片图像作为布局的背景,以允许更“自然”的阴影:

结果:

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

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

[编辑]

大约9个补丁,以防你从未使用过


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

黑色标记区域(左侧和顶部)将拉伸(垂直、水平)。
黑色标记区域(右,下)定义了“内容区域”(可以在其中添加文本或视图-如果愿意,可以将未标记区域称为“填充”)


教程:

好吧,我知道这太晚了。但我有同样的要求。我是这样解决的

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>
 <?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>

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">


这对我很有用。

我使用9块补丁图形获得了最漂亮的效果

您只需使用以下编辑器创建单个9面片图形:

示例:

9补丁图形:

结果是:

资料来源:

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

这就是CardView存在的原因
它只是一个框架布局,支持棒棒糖前设备中的提升

<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>
这很简单:

创建具有如下渐变的可绘制文件:

对于视图下方的阴影,请参见\u 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>
<?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>

依此类推,对于左右阴影,只需更改渐变角度:)

您可以在drawable中创建一个名为drop_shadow.xml的文件.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>

然后:


亚马赫迪aj---相对论


我找到了解决这个问题的最佳方法

  • 您需要在布局上设置实心矩形背景

  • 使用此代码-
    ViewCompat.setElevation(视图,值)

  • 在父布局集上,android:clipToPadding=“false”


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

    使用:
    android:elevation=“3dp”
    根据需要调整大小,这是实现类似阴影按钮和其他默认android阴影的最佳且最简单的方法。
    让我知道它是否有效

    如果您已经拥有形状的边界,只需添加高程:

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

    我知道这很晚了,但它可以帮助别人

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

            android:elevation="4dp"
    

    1.首先在“drawable”文件夹中创建一个xml文件名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>
    
     <?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
            android:id="@+id/header_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/shadow"
            android:orientation="vertical">
    
    
    
    您可以使用
    background
    属性…为其创建一个具有矩形、颜色和阴影效果的XML文件,并将其设置为线性布局的背景。使用笔划作为灰色边框和填充效果我认为,这是两个布局XML,说一个是线性布局,内部是相对布局padding@Prag您能帮我创建这个xml文件吗?另一种方法是使用9补丁图像作为布局的背景。这将允许一个非常平滑的、逐渐消失的阴影(在我看来,这非常现实)。@Hariharan非常感谢!我试过你的密码,看起来还可以。但是,还有一件事要做,如何在线性布局的左侧和右侧添加薄边框(1dp)?(例如)@wawanopoulos只需在Hariharan的回答中将
    “0dp”
    替换为
    “1dp”
    。您可以在父布局中添加#EAEAEA颜色,因此它将与我建议的问题图像一样,您可以在
    中使用
    来增强边框效果,此外,如果它确实是您的UI所需的效果,而不仅仅是纯色边框。请确保您的内部布局与match_parent匹配,然后为内部布局指定边距1,只需将其添加为视图的背景即可。黑色标记区域(左侧和顶部)将拉伸(垂直、水平)。黑色标记区域(右,下)定义了“内容区域”(可以在其中添加文本或视图-如果愿意,可以称之为“填充”)。教程:我把下面的阴影叫做什么?视图背景?创建以下阴影xml文件,然后
    <LinearLayout
            android:id="@+id/header_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/shadow"
            android:orientation="vertical">