Tại sao không có khoảng trống giữa các CardView trên Lollipop?


79

Tôi cố gắng sử dụng CardViewvà nó hoạt động tốt dưới 5.0, nhưng trông lạ trên Lollipop.

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

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

<?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="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="200dp">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="card1"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.CardView>
<android.support.v7.widget.CardView android:layout_width="match_parent"
    android:layout_height="200dp">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="card2"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</android.support.v7.widget.CardView>
</LinearLayout>

Tôi gặp câu hỏi tương tự khi sử dụng RecyclerView, tôi có nên thêm thứ gì đó nếu nó chạy trên Lollipop không?


1
thêm LinearLayoutvào giữa các thẻ
Andres Cárdenas

Câu trả lời:


205

Đặt điều này trên CardView:

app:cardUseCompatPadding="true"

Từ tài liệu:

Thêm phần đệm trong API v21 + để có cùng số đo với các phiên bản trước.


1
Tôi đã sử dụng không gian tên "ứng dụng" để thay thế. "Card_view" có còn được sử dụng không?
wsgeorge

1
@wsgeorge đó là từ tài liệu Android, nhưng tôi đã chỉnh sửa nó thành không gian tên ứng dụng thân thiện hơn.
tomrozb

trông đẹp hơn nhưng làm thế nào để loại bỏ đường phân cách?
không có tin tức

@nonews Bạn có thể thử android:divider="@null".
SREE

29

Sử dụng hai thẻ này bên dưới bên trong chế độ xem thẻ của bạn:

app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true"

13

hình ảnh đầu tiên là hành vi mong đợi của chế độ xem thẻ. khi thẻ có độ cao, bóng đổ xuống các lớp dưới cùng. Trong các thiết bị tiền kẹo mút, độ cao được thực hiện bằng cách thêm phần đệm. vì vậy các thiết bị tiền kẹo mút sẽ có phần đệm xung quanh chế độ xem thẻ.

Trước L, CardView thêm phần đệm vào nội dung của nó và vẽ bóng cho khu vực đó. Số lượng đệm này bằng maxCardElevation + (1 - cos45) * angleRadius ở các bên và maxCardElevation * 1.5 + (1 - cos45) * angleRadius ở trên và dưới.


vì vậy kích thước của cardview mà chúng ta thấy trong trình chỉnh sửa không phải là kích thước thực mà chúng ta có thể sử dụng khi bên dưới kẹo mút, có một phần của nó được sử dụng để thêm phần đệm và trên lollipop, kích thước trong bố cục giống như thực, nó có vẻ như cho một phần đệm của nó trông đẹp hơn , nhưng tôi nên làm thế nào để tách chúng ra?
cajsaiko

những gì bạn thấy trong trình chỉnh sửa là những gì bạn nhận được trong thực tế. Để có biên độ giống nhau giữa các thẻ trong tất cả lề screens.set nếu đòn bẩy API là 21 hoặc cao hơn
con trỏ null

5
Câu trả lời này là chính xác. Ngoài ra, nếu bạn muốn làm cho giao diện người dùng nhất quán với việc thêm các lề riêng biệt cho các giá trị-21, bạn có thể đặt đệm tính toán thành true để nó cũng sẽ thêm đệm tương tự trong L. developer.android.com/reference/android/support/v7/widget/…
yigit

@billgates sau khi thêm lề, chế độ xem thẻ trông đẹp trên cả lollpop và pre-lollpop, cảm ơn câu trả lời của bạn!
cajsaiko

1
Có thể xóa phần đệm trên các thiết bị tiền kẹo mút không?
user2456977

5

Bạn phải thêm app:cardUseCompatPadding="true"vào của bạn Cardview. Nhưng chỉ thêm điều đó có thể gây ra lỗi cho bạn. Để tránh lỗi đó, bạn cũng phải thêm xmlns:app="http://schemas.android.com/apk/res-auto"vào của bạn CardView.

Ví dụ,

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:cardUseCompatPadding="true">

    // Other views here

</android.support.v7.widget.CardView>

Một số sẽ thêm card_view:cardUseCompatPadding="true"xmlns:card_view="http://schemas.android.com/apk/res-auto"thay vì những người đã đề cập ở trên. Cả hai cách đều đúng.

Nếu bạn muốn biết thêm về ứng dụng trong XML (Android), vui lòng xem qua câu trả lời sau:

Mặc dù các câu trả lời trước đây sẽ giải quyết được vấn đề, nhưng chúng không giải thích mỗi thuộc tính làm gì. Vì vậy, để hữu ích hơn khi trả lời những người tìm kiếm,

cardPreventCornerOverlap thuộc tính thêm phần đệm vào CardView trên v20 trở về trước để ngăn phần giao nhau giữa nội dung Thẻ và các góc tròn.

cardUseCompatPadding thuộc tính thêm phần đệm trong API v21 + cũng như để có cùng số đo với các phiên bản trước.

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.