Подтвердить что ты не робот

Cardview - белая рамка вокруг карты

Я использую cardview как корень пользовательского представления, которое я пишу. Я использую библиотеку поддержки v7. Мой XML выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="6dp"
        card_view:cardElevation="0dp">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

        <!-- some other views -->
    </LinearLayout>
</android.support.v7.widget.CardView>

Моя проблема в том, что я получаю белую рамку вокруг моего вида карты. Похоже, что там указывается высота, так как она толще с правой стороны. Я попытался настроить cardElevation и MaxCardElevation в моем XML так: card_view:cardElevation="0dp"

и в коде в моем пользовательском представлении, которое расширяет CardView и использует этот макет:

setCardElevation(0);
setMaxCardElevation(0);

Но белая граница сохраняется. Я не уверен, как избавиться от него. Если бы кто-нибудь имел какое-либо влияние на то, почему это происходит, или предложения о том, как я могу удалить белую границу, это будет оценено по достоинству. Большое спасибо.

4b9b3361

Ответ 1

Я знаю это немного позже, но для тех, у кого есть аналогичная проблема:

У меня была такая же проблема: белая рамка была показана на устройствах с предварительным лепестком.

Я решил настроить cardPreventCornerOverlap на false на ваш XML.

Вот так:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_marginRight="6dp"
    card_view:cardPreventCornerOverlap="false">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- some other views -->
    </LinearLayout>
</android.support.v7.widget.CardView>

Надеюсь, это поможет!

Ответ 2

Поддержка CardView не поддерживает обрезку контента, потому что она дорогая для старых устройств. Он позволяет обрезать контент с использованием режимов Canvas.saveLayer/restoreLayer и PorterDuff. Вот как Carbon реализует закругленные углы с правильным отсечением содержимого. См. Изображение:

введите описание изображения здесь

Ответ 3

Я мог бы опоздать в игре, но у меня была такая же проблема. Просто хотел поделиться простым решением!

Мое пользовательское представление расширило CardView, и я применил маркер к корневому элементу (т.е. CardView) в XML, как в исходном вопросе. Это закончило тем, что дало мне дополнительную белую границу:

До

Решение заключалось в том, чтобы переместить маркер из корня XML пользовательского вида в объявление вашего пользовательского представления (отметьте комментарии в фрагменте)

Фрагмент кода:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/cvSettings"
    style="@style/DefaultCardViewStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/default_margin" <!-- Remove this -->
    app:cardElevation="@dimen/default_card_elevation">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        .
        .
        .
</android.support.v7.widget.CardView>

Закончилось просто перемещение по полям в мое пользовательское объявление вида, которое избавилось от дополнительной белой границы:

<com.example.android.custom.MyCustomView
        android:id="@+id/custom_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/default_margin" <!-- Move it here-->
        cv:pt_widgetColor="@color/colorAccent" />

После смены, намного чище:):

введите описание изображения здесь

Ответ 4

использовать cardBackgroundColor = "color" в xml card_view образец кода:

<android.support.v7.widget.CardView
        android:id="@+id/card_view_khaterat"
        android:layout_width="250dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"
        app:cardBackgroundColor="#f56f6c"/>