Android AppCompat 21 Elevation


76

Có cách nào để thêm độ cao vào Viewthiết bị tiền kẹo mút mà không cần gói chúng trong một CardViewkhông?


Tham khảo tại đây: android-developers.blogspot.in/2014/10/… Họ đã nói nó cho thanh Hành động là getSupportActionBar (). SetElevation (0). Vì vậy, hãy thử tương tự cho chế độ xem thẻ của bạn.
AruLNadhaN

3
Tôi không muốn thêm độ cao vào a CardView. Tôi muốn thêm nó vào bất kỳ Viewnếu có thể.
Eliezer

Câu trả lời:


79

ViewCompat.setElevation(View, int) hiện không tạo ra miếng chêm.

Cách duy nhất để mô phỏng độ cao ngay bây giờ là áp dụng bóng trước v21. Xác định phong cách / bố cục / có thể vẽ của bạn valuesvà ghi đè lên values-v21. Đối với các nút, tôi sử dụng ghi đè kiểu. Đối với bố cục, tôi thường ghi đè tham chiếu (sử dụng @nullđể loại bỏ một tệp có thể vẽ được).

Hy vọng rằng trong tương lai, bản cập nhật cho thư viện hỗ trợ sẽ thêm shims.

Chủ đề reddit này theo dõi cập nhật đã nói.

Biên tập

Thư viện thiết kế hỗ trợ mới thực sự tạo miếng chêm cho nút hành động nổi.


2
Điều này vẫn không hoạt động phải không? Chính xác thì 'miếng chêm' là gì :)?
Daniel Wilson

6
@DanielWilson một miếng đệm là một giải pháp thay thế ( en.wikipedia.org/wiki/Shim_(computing) ). Vì bóng có nguồn gốc từ 5.0, bạn cần một miếng chêm cho <5.0
Derk-Jan

Rất thú vị thankyou :) Hy vọng rằng các kỹ sư sẽ không bỏ qua điều này cho các thiết bị cũ hơn. Tôi không muốn tự mình làm điều đó: D
Daniel Wilson

@DanielWilson thành thật mà nói: Material Design là một phần của thế hệ 5.0+. Nó không thực sự có ý nghĩa khi có nó trước kẹo mút. Tôi nghĩ rằng điều đó và việc không có renderthread là lý do tại sao nó sẽ không được hỗ trợ.
Derk-Jan

@ Derk-Jan không may là Android 5 chỉ chiếm <2% thị phần thậm chí vài tháng sau khi bạn viết điều đó
Greg Ennis

64

Đây là ví dụ về cách thêm bóng đổ bên dưới Toolbartrên các thiết bị tiền kẹo mút:

nhập mô tả hình ảnh ở đây

Bố cục phải là:

<RelativeLayout
    android:id="@+id/toolbar_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:animateLayoutChanges="true"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <View
        android:id="@+id/toolbar_shadow"
        android:layout_width="match_parent"
        android:layout_height="@dimen/toolbar_shadow"
        android:layout_below="@id/toolbar"
        android:background="@drawable/toolbar_dropshadow" />
</RelativeLayout>

Và bóng tối là:

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

    <gradient
        android:angle="90"
        android:endColor="#88444444"
        android:startColor="@android:color/transparent" />

</shape>

1
bạn có thể cung cấp thông tin về - android: layout_height = "@ dimen / toolbar_shadow"
Ranjith Kumar

2
nó là kích thước của cái bóng, cao hơn giá trị, nhiều hơn "nâng lên" trên thanh công cụ là
thiagolr

Theo giá trị được chọn từ trang web thiết kế của google, endColor phải là # 45000000. Tuy nhiên, nó phụ thuộc vào nơi giá trị thu được.
Curious Sam

Một giải pháp đơn giản như vậy. Cảm ơn bạn!
BK

48

Tôi đạt được hiệu quả tương tự bằng cách sử dụng,

  android:background="@android:drawable/dialog_holo_light_frame"

Đầu ra đã thử nghiệm của tôi:

nhập mô tả hình ảnh ở đây

tham khảo - https://stackoverflow.com/a/25683148/3879847

Cập nhật: Nếu bạn muốn thay đổi màu sắc của câu trả lời có thể vẽ này, hãy thử @Irfan answer

https://stackoverflow.com/a/40815944/3879847


1
Tôi đã sử dụng thủ thuật này cho bộ điều hợp RecyclerView và hoạt động tốt. Cám ơn vì đã chia sẻ!
Alberto Gaona

Làm cách nào để thực hiện việc này cho AlertDialog? Tôi có một kiểu được áp dụng cho hộp thoại vì vậy tôi đã thêm thuộc tính được đề cập vào đó nhưng nó trông kỳ lạ. Có vẻ như tôi đã thêm nhiều trang tính / lớp làm nền. Có manh mối nào không?
cgr

Việc sử dụng các tài nguyên hệ thống như @android: drawable / Dial_holo_light_frame rất nguy hiểm, phải không? Một số nhà sản xuất thiết bị di động có thể ghi đè tài nguyên hệ thống, vì vậy tài nguyên này có thể được hiển thị khác nhau trên các thiết bị khác nhau, phải không?
P. Ilyin

Tôi Sử dụng tài nguyên này hơn 2 năm .. Tuy nhiên, tôi không nhận được bất kỳ vấn đề .. Nó làm việc tại Samsung, Asus, Nexus, moto .. Và Lenovo cũng ..
Ranjith Kumar

-4

Bây giờ bạn có thể sử dụng lược đồ xmlns:app="http://schemas.android.com/apk/res-auto"app:elevation

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
...

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            app:elevation="5dp">

để xem phải sử dụng appcompact như 'android.support.v7.widget.AppCompatTextView'
abbasalim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.