web-dev-qa-db-ja.com

Android:elevationを使用してLinearLayoutの上に影を落とします

アクティビティレイアウトの下部に配置される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コンポーネントの上に影を置く方法はありますか?事前に感謝します!

27
yat0

理論的には、Android:elevationを使用してそれを行うことはできません。シャドウを投影する方向を選択できないという意味です。

2つの解決策があります。

1。 Drawables

たとえば、レイアウトのすぐ上にImageViewを置き、Android:src="@drawable/shadow"を設定できます。これは here で説明されているように、XMLで定義された垂直GradientDrawableでなければなりません。

2。回避策

影のほとんどは実際にはビューの下にありますが、微妙な影も上にあります。回避策として、40dpのようなelevationに非常に高い値を使用する場合があります。レイアウトのために下部が非表示になり、上部が拡張されて一般的なようになります影。

どちらの場合でも、影がAndroid:elevation=4dpによって投影されたものと同等であると確信できないという意味で、dpの標高値を制御することはできません。

33
natario

のように使用します。

<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>
1
semih

上部の標高が必要なビューの上にこのコードを追加するか、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" />
0

これを試してくださいxmlを介して背景を設定することはできませんし、それを解決するためのプログラム的な方法を試してみました

lprofile.setBackgroundResource(R.drawable.background_with_shadow);

lprofileはリニアレイアウトのrefです。background_with_shadowはシャドウを適用するためのxmlです。

0
user7957410