20

我有這個LinearLayout,它將放置在活動佈局的底部。我希望這個LinearLayout有一個4dp的標高,就像頂部工具欄應該有的一樣,但是,由於android:elevation將陰影放置在UI組件的下方,而此特定組件(linearLayout)將位於屏幕的底部,看不到任何擡高所有..使用android投射在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到PL在UI組件頂部添加一個陰影? 在此先感謝!

+0

不,沒有。你應該使用drawable。 – natario

+2

(骯髒的黑客:你有沒有嘗試過設置一個巨大的數字,比如海拔= 40dp?也許海拔也會給頂部投下一點陰影,而且可能會以較大的值顯示) – natario

+0

我在v21之前使用了drawable,但我希望我不需要v21。但是,我真的非常喜歡這個小小的黑客,我將海拔設置爲30DP並且它可以工作,這非常微妙,但是我喜歡它!非常感謝@mvai – yat0

回答

28

理論上你不能用android:elevation來做,因爲你不能選擇陰影將要投射的方向。

有兩種解決方案。

1繪項目

你可以,例如,把一個ImageView右佈局上方設置android:src="@drawable/shadow"。這應該是以XML定義的垂直GradientDrawable,如解釋here所述。

2.解決方法

雖然大多數的陰影實際上是視圖下方,一個微妙的陰影也上方。解決方法可能使用elevation的非常高的值,如40dp:由於您的佈局,底部部分將會隱藏,而頂部將會展開並看起來像一個共同的陰影。

在這兩種情況下,您無法控制dp中的高程值,因爲您無法確定您的影子是否與android:elevation=4dp所投影的影子相同。

+1

變通辦法解決方案非常適合我需要的!謝謝 – yat0

+0

解決方案解決方案也適合我。謝謝! – validcat

+0

我已經設法使用你的第一種方法。謝謝! –

1

用途like;

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

試試這個我無法設置通過XML背景的話,我試過編程的方式來解決這一點,我的工作在線性佈局,如果面臨秀影問題完全參照本

lprofile.setBackgroundResource(R.drawable.background_with_shadow); 

lprofile是我的參考線性佈局和background_with_shadow是xml申請影子我希望我會爲你的要求...謝謝你..