20

Tôi có số này LinearLayout sẽ được đặt ở cuối bố cục hoạt động. Tôi muốn điều này là LinearLayout để có độ cao 4dp, giống như thanh công cụ trên cùng, tuy nhiên, vì android:elevation đặt bóng bên dưới thành phần ui và thành phần cụ thể này (linearLayout) sẽ nằm ở cuối màn hình, tôi đã thắng ' t thấy bất kỳ độ cao nào cả ..Bóng đổ lên trên LinearLayout bằng android: độ cao

Đây là mã của tôi LinearLayout, và một hình ảnh của nó với độ cao mặc định thực hiện:

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

có cách nào, sử dụng elevation để pl ace một bóng trên đầu trang của thành phần ui? Cảm ơn bạn trước!

+0

Không, không có. bạn nên sử dụng một drawable. – natario

+2

(hack bẩn: bạn đã thử đặt một số lượng lớn, chẳng hạn như độ cao = 40dp? Có thể độ cao cũng tạo thành một bóng nhỏ lên trên cùng và có thể hiển thị với các giá trị lớn) – natario

+0

Tôi đang sử dụng một bản vẽ cho trước v21, nhưng Tôi đã hy vọng rằng tôi không cần nó cho v21 .. Tuy nhiên, tôi thực sự thực sự yêu hack nhỏ đó, tôi thiết lập độ cao đến 30 dp và nó hoạt động, nó rất tinh tế, nhưng tôi thích nó! Cảm ơn rất nhiều @mvai – yat0

Trả lời

28

Bạn không thể thực hiện theo lý thuyết với android:elevation, theo nghĩa là bạn không thể chọn hướng mà bóng sẽ được đúc.

Có hai giải pháp.

1. Drawables

Bạn có thể, ví dụ, đặt một ImageView ngay trên bố trí của bạn và thiết lập android:src="@drawable/shadow". Đây phải là số GradientDrawable được định nghĩa theo chiều dọc trong XML, như được giải thích here.

2. Cách giải quyết

Trong khi hầu hết các bóng thực sự là dưới cái nhìn, một cái bóng tinh tế cũng là ở trên. Cách giải quyết có thể đang sử dụng giá trị rất cao cho elevation, như 40dp: phần dưới cùng sẽ bị ẩn do bố cục của bạn, trong khi phần trên cùng sẽ được mở rộng và trông giống như một bóng chung.

Trong cả hai trường hợp, bạn không có quyền kiểm soát giá trị độ cao trong dp, theo nghĩa là bạn không thể chắc chắn bóng của mình tương đương với bóng được gắn bởi android:elevation=4dp.

+1

giải pháp workaround là tuyệt vời cho những gì tôi cần! Cảm ơn – yat0

+0

Ngoài ra giải pháp workaround hoạt động hoàn hảo cho tôi. Cảm ơn! – validcat

+0

Tôi đã quản lý để làm điều đó bằng cách sử dụng phương pháp tiếp cận đầu tiên của bạn. Cảm ơn! –

1

sử dụng như;

<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

Hãy thử điều này tôi vẫn chưa thể thiết lập nền qua xml sau đó tôi đã cố gắng cách chương trình để giải quyết đó và tôi làm việc một cách hoàn hảo tham khảo này nếu phải đối mặt với vấn đề trong chương trình bóng trong Linear Layout

lprofile.setBackgroundResource(R.drawable.background_with_shadow); 

lprofile là ref của tôi về bố trí tuyến tính và background_with_shadow là xml để áp dụng bóng tôi hy vọng tôi sẽ cho requirmement ur ... cảm ơn u ..

Các vấn đề liên quan