使用android:elevation在LinearLayout上投射阴影

时间:2015-09-04 10:37:00

标签: android android-layout android-5.0-lollipop material-design

我将此LinearLayout放在活动布局的底部。我希望这个LinearLayout具有4dp高程,就像顶部工具栏应该具有的那样,但是,因为android:elevation将阴影置于ui组件下方,并且此特定组件(linearLayout)将位于在屏幕的底部,我根本看不到任何高度。

这是我的LinearLayout代码,以及实现默认提升的图片:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="3"
    android:background="@android:color/transparent"
    android:orientation="horizontal"
    android:elevation="4dp"
    android:layout_alignParentBottom="true">

    <ImageButton
        android:id="@+id/playButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:scaleType="center"
        android:clickable="true"
        android:background="@drawable/bottom_toolbar_menu_selector"
        android:src="@drawable/ic_play"
        style="?android:attr/borderlessButtonStyle" />

    <ImageButton
        android:id="@+id/stopButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:scaleType="center"
        android:clickable="true"
        android:background="@drawable/bottom_toolbar_menu_selector"
        android:src="@drawable/ic_stop"
        style="?android:attr/borderlessButtonStyle" />

    <ImageButton
        android:id="@+id/bookmarkButton"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:scaleType="center"
        android:clickable="true"
        android:background="@drawable/bottom_toolbar_menu_selector"
        android:src="@drawable/ic_bookmark"
        style="?android:attr/borderlessButtonStyle" />

</LinearLayout>

enter image description here

有没有办法,使用elevation在ui组件的顶部放置阴影? 提前谢谢!

4 个答案:

答案 0 :(得分:32)

理论上你无法用android:elevation来做,因为你无法选择投射阴影的方向。

有两种解决方案。

<强> 1。可绘

例如,您可以在布局上方放置ImageView并设置android:src="@drawable/shadow"。这应该是XML中定义的垂直GradientDrawable,如here所述。

<强> 2。解决方法

虽然大部分阴影实际上位于视图下方,但细微阴影也在上方。解决方法可能使用elevation的非常高的值,例如40dp:由于您的布局,底部将被隐藏,而顶部将被扩展并看起来像一个普通的阴影

在任何一种情况下,您都无法控制dp中的高程值,因为您无法确定您的阴影等同于android:elevation=4dp投射的阴影。

答案 1 :(得分:1)

使用像;;

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="205dp"
    android:background="@color/white"
    android:orientation="horizontal">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_marginTop="-5dp"
        android:background="@color/white"
        android:elevation="3dp"
        android:paddingTop="5dp">

        // CHILD VIEWS
    </RelativeLayout>
</LinearLayout>

答案 2 :(得分:0)

尝试这个我无法通过xml设置背景然后我尝试以编程方式解决这个问题,如果在线性布局中显示阴影面临问题,我会完美地参考这个

lprofile.setBackgroundResource(R.drawable.background_with_shadow);

lprofile是我的线性布局参考,background_with_shadow是xml用于应用阴影我希望我会为你的要求...谢谢你...

答案 3 :(得分:0)

将此代码添加到您想要顶视图的视图上方,或者添加android:layout_marginTop="-4dp"并添加到上方视图的下方

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="0.01dp"
    android:layout_below="@+id/scrollbar"
    app:cardBackgroundColor="@android:color/transparent"
    app:cardCornerRadius="0dp"
    app:cardElevation="@dimen/dp_4" />