Цвет фона CardView обрезан

Я установил угловой радиус CardView на 50 dp, чтобы получить самый круглый угол. Но в некоторых телефонах (я видел в андроиде 8) цвет фона карты обрезается. Хотя высота тени/карты округлена, цвет фона — нет. Что здесь может быть не так? Заранее спасибо.

отмеченные просмотры — это просмотры карточек


person dhir    schedule 14.06.2020    source источник
comment
Опубликуйте свой код, пожалуйста   -  person Gabriele Mariotti    schedule 15.06.2020


Ответы (2)


Вместо использования углового радиуса 50dp используйте атрибут shapeAppearanceOverlay для определения угла с 50%:

    <com.google.android.material.card.MaterialCardView
        app:shapeAppearanceOverlay="@style/ButtomShape50"
        app:cardBackgroundColor="@color/...."
        ...>

с:

<style name="ButtomShape50">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
</style>

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

Программно вы можете сделать:

cardView.setShapeAppearanceModel(cardView.getShapeAppearanceModel()
            .toBuilder()
            .setAllCorners(new RoundedCornerTreatment()).setAllCornerSizes(new RelativeCornerSize(0.5f))
            .build());

Просто примечание о новом RelativeCornerSize(0.5f): он изменился в 1.2.0-beta01. До этого было new RelativeCornerSize(50)).

В вашем случае вы также можете использовать FloatingActionButton или ExtendedFloatingActionButton без использования CardView.

<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
        app:elevation="4dp"
        app:shapeAppearanceOverlay="@style/ButtomShape50"/>

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

person Gabriele Mariotti    schedule 14.06.2020
comment
Большое спасибо. Но у вас есть что-нибудь для виджета CardView? ‹androidx.cardview.widget.CardView Также мотыгой, чтобы сделать это динамически без использования каких-либо ресурсов? - person dhir; 15.06.2020
comment
MaterialCardView расширяет androidx.cardview.widget.CardView и предоставляется Google в официальной библиотеке компонентов материалов. Что вы имеете в виду под динамическим? Это статические ресурсы, но вы можете сделать это и программно. - person Gabriele Mariotti; 15.06.2020
comment
Да, я хочу сделать это программно. Как это сделать ? И я не хочу использовать статический файл ресурсов. Все должно содержаться в java файле - person dhir; 15.06.2020
comment
Спасибо. Ваш пример работает, но поскольку я не использую материальную тему, я не могу использовать это. Что-нибудь для appCompat? И я могу создавать круглые кнопки, используя плавающие кнопки. Является ли пользовательский фон лучшим вариантом? Можем ли мы не использовать CardView для достижения этой цели? - person dhir; 15.06.2020
comment
Какую библиотеку вы используете для Fab? - person Gabriele Mariotti; 15.06.2020
comment
Я использую com.google.android.material.floatingactionbutton.FloatingActionButton, но это не дает мне никаких исключений. Но когда я использую MaterialCardView, он говорит мне изменить тему - person dhir; 15.06.2020
comment
@dhir Проверьте doc. Для этой библиотеки требуется тема Material Components или тема Bridge. - person Gabriele Mariotti; 15.06.2020

Вы используете android:background для цвета фона карточки? Вы должны использовать app:cardBackgroundColor.

person Dark Byte    schedule 14.06.2020
comment
Я использую app:cardBackgroundColor, но у меня все еще есть эта проблема. - person dhir; 15.06.2020