如何在android中的linearlayout周围显示阴影?

San*_*osh 75 android roundedcorners-dropshadow android-linearlayout

如何为线性布局显示阴影.我想要白色圆形背景和线性布局周围的阴影.到目前为止我已经这样做了.请帮我.提前致谢.

<LinearLayout
 android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@xml/rounded_rect_shape"
android:orientation="vertical"
android:padding="10dp">
<-- My buttons, textviews, Imageviews go here -->
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

和xml目录下的rounded_rect_shape.xml

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

   <solid android:color="#ffffff" />

   <corners
      android:bottomLeftRadius="3dp"
      android:bottomRightRadius="3dp"
      android:topLeftRadius="3dp"
      android:topRightRadius="3dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)

小智 142

通过实现将作为LinearLayoout的背景的图层列表,还可以解决该问题.

添加background_with_shadow.xml文件到res/drawable.含:

<?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="@android:color/darker_gray" />
        <corners android:radius="5dp"/>
        </shape>
    </item>
    <item android:right="1dp" android:left="1dp" android:bottom="2dp">
        <shape 
            android:shape="rectangle">
        <solid android:color="@android:color/white"/>
        <corners android:radius="5dp"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

然后在LINELayout中将图层列表添加为背景.

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/background_with_shadow"/>
Run Code Online (Sandbox Code Playgroud)

  • 要添加,上部形状是阴影(!),而下部形状是主要的较大部分. (3认同)

Mur*_*ira 29

嗯,这很容易实现.

只需构建一个GradientDrawable来自黑色并变为透明颜色的颜色,而不是使用父关系将形状放置在您想要有阴影的视图附近,那么您只需要为高度或宽度赋予任何值.

这是一个例子,这个文件必须在里面创建res/drawable,我把它命名为shadow.xml:

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

    <gradient
        android:startColor="#9444"
        android:endColor="#0000"
        android:type="linear"
        android:angle="90"> <!-- Change this value to have the correct shadow angle, must be multiple from 45 -->
    </gradient>

</shape>
Run Code Online (Sandbox Code Playgroud)

从上面放置以下代码LinearLayout,例如,设置android:layout_widthandroid:layout_height,fill_parent并且2.3dp,你将有一个很好的阴影效果LinearLayout.

<View
    android:id="@+id/shadow"
    android:layout_width="fill_parent"
    android:layout_height="2.3dp"  
    android:layout_above="@+id/id_from_your_LinearLayout" 
    android:background="@drawable/shadow">
</View>
Run Code Online (Sandbox Code Playgroud)

注1:如果增加android:layout_height更多阴影将显示.

注意2:android:layout_above="@+id/id_from_your_LinearLayout"如果要将此代码放在RelativeLayout中,请使用属性,否则忽略它.

希望它对某人有帮助.


Arc*_*pgc 26

Android中没有这样的属性来显示阴影.但可能的方法是:

  1. 添加一个带有灰色的普通LinearLayout,在其上添加您的实际布局,底部和右侧的边距等于1或2 dp

  2. 使用带阴影的9补丁图像并将其设置为线性布局的背景


Ode*_*ner 17

对于棒棒糖及以上,您可以使用高程.

对于旧版本:

这是一个懒惰的黑客来自:http: //odedhb.blogspot.com/2013/05/android-layout-shadow-without-9-patch.html

(toast_frame在KitKat上不起作用,阴影从吐司中移除)

只需使用:

android:background="@android:drawable/toast_frame"
Run Code Online (Sandbox Code Playgroud)

要么:

android:background="@android:drawable/dialog_frame"
Run Code Online (Sandbox Code Playgroud)

作为背景

例子:

<TextView
        android:layout_width="fill_parent"
        android:text="I am a simple textview with a shadow"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:padding="16dp"
        android:textColor="#fff"
        android:background="@android:drawable/toast_frame"
        />
Run Code Online (Sandbox Code Playgroud)

并且具有不同的bg颜色:

<LinearLayout
        android:layout_height="64dp"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:background="@android:drawable/toast_frame"
        android:padding="4dp"
        >
    <Button
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:text="Button shadow"
            android:background="#33b5e5"
            android:textSize="24sp"
            android:textStyle="bold"
            android:textColor="#fff"
            android:layout_gravity="center|bottom"
            />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)


Kin*_*ses 12

试试这个.. layout_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="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)

像这样适用于您的布局

 android:background="@drawable/layout_shadow"
Run Code Online (Sandbox Code Playgroud)


小智 7

我知道这是旧的,但是这些答案中的大多数都需要大量额外的代码。

如果你有浅色背景,你可以简单地使用这个:

android:elevation="25dp"
Run Code Online (Sandbox Code Playgroud)


Sub*_*rif 5

实际上我同意@odedbreiner,但我将dialog_frame放在第一层内,并隐藏白色层下的黑色背景.

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:drawable="@android:drawable/dialog_frame"
        android:right="2dp" android:left="2dp" android:bottom="2dp" android:top="5dp" >
        <shape android:shape="rectangle">
            <corners android:radius="5dp"/>
        </shape>
    </item>
    <item>
        <shape
            android:shape="rectangle">
            <solid android:color="@android:color/white"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)