首页 > 解决方案 > Android CardView:为什么角落不圆?

问题描述

解决了!

解决方案:从布局中删除背景颜色并将其设置为卡片视图本身

app:cardBackgroundColor=" # the color you want"

并确保您具有以下依赖项

implementation 'com.google.android.material:material:1.1.0'

那些应该做的工作。

更新!--> 添加了额外的信息

我有以下活动,我尝试制作 3 个包含信息的卡片视图。我想让卡片视图有圆角。

我使用app:cardCornerRadius="8dp"但它没有显示任何结果,角落仍然不圆。

知道我的错误在哪里以及我需要做什么才能使它们四舍五入吗?是因为 CardView 内部的布局吗?

谢谢!

您可以在下面看到 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".view.ViewRecipe"
    android:padding="16dp"
    android:background="@color/mainBackgroundColorRM">

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


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:fontFamily="sans-serif"
            android:text="Spaghette"
            android:textAlignment="center"
            android:textColor="#000000"
            android:textSize="32sp" />


        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="12dp"
            android:layout_marginEnd="8dp"
            app:cardPreventCornerOverlap="false"
            app:cardCornerRadius="8dp"
            app:cardElevation="20dp">

            <!-- Here add the Contact Details-->
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/buttonColorRM"
                android:paddingStart="32dp"
                android:paddingTop="8dp"
                android:paddingEnd="32dp"
                android:paddingBottom="8dp">
                <!-- Here add the time value -->
                <TextView
                    android:id="@+id/text_view_duration_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:text="10 minute"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
                    android:textColor="#000000">
                </TextView>

                <!-- Here add the portii value -->
                <TextView
                    android:id="@+id/text_view_servings_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_duration_value"
                    android:layout_alignParentEnd="true"
                    android:text="@string/Servings_VALUE_demo"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000">
                </TextView>

                <!-- Duration is here-->
                <TextView
                    android:id="@+id/text_view_duration"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/text_duration_ViewRecipe"
                    android:layout_toStartOf="@id/text_view_duration_value"
                    android:layout_alignParentStart="true"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold">
                </TextView>

                <!-- Time is here-->
                <TextView
                    android:id="@+id/text_view_portii"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_duration"
                    android:text="@string/text_servings_ViewRecipe"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold">

                </TextView>

            </RelativeLayout>

        </androidx.cardview.widget.CardView>

        <!-- Ingredients -->
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="12dp"
            app:cardElevation="20dp"
            app:cardPreventCornerOverlap="false"
            app:cardCornerRadius="8dp">

            <!-- Here add the Contact Details-->
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="8dp"
                android:paddingStart="32dp"
                android:paddingEnd="32dp"
                android:background="@color/buttonColorRM">

                <!-- Duration is here-->
                <TextView
                    android:id="@+id/text_view_ingredients"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="  Incrediente:"
                    android:layout_alignParentStart="true"
                    android:ellipsize="end"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold"
                    android:drawableStart="@drawable/list_icon">
                </TextView>

                <!-- Time is here-->
                <TextView
                    android:id="@+id/text_view_ingredients_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_ingredients"
                    android:text="Incredient 1, incredient 2, altul mai unul si ai unul"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
                    android:textColor="#000000">

                </TextView>

            </RelativeLayout>
        </androidx.cardview.widget.CardView>

        <!-- Recipe -->
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="12dp"
            app:cardElevation="20dp"
            app:cardPreventCornerOverlap="false"
            app:cardCornerRadius="8dp">

            <!-- Recipe description is here-->
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="8dp"
                android:paddingStart="32dp"
                android:paddingEnd="32dp"
                android:background="@color/buttonColorRM">

                <!-- Duration is here-->
                <TextView
                    android:id="@+id/text_view_recipe"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/text_view_descriere_ViewRecipe"
                    android:layout_alignParentStart="true"
                    android:ellipsize="end"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold"
                    android:drawableStart="@drawable/description_icon">
                </TextView>

                <!-- Time is here-->
                <TextView
                    android:id="@+id/text_view_recipe_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_recipe"
                    android:text="@string/demo_reteta"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
                    android:textColor="#000000">
                </TextView>

            </RelativeLayout>
        </androidx.cardview.widget.CardView>

    </LinearLayout>

</ScrollView>

这里还有 Gradle Module App 文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.ciucurdaniel.romania.retetelemele"
        minSdkVersion 26
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        targetCompatibility = 1.8
        sourceCompatibility = 1.8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'

    //AD MOB
    implementation 'com.google.android.gms:play-services-ads:19.1.0'

    //CardView
    implementation 'androidx.cardview:cardview:1.0.0'
}

标签: androidandroid-layoutandroid-cardview

解决方案


由于您设置了内部布局的背景,您CardView是圆角但不显示圆角。只需将该背景内部布局移动到CardView

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".view.ViewRecipe"
    android:padding="16dp"
    android:background="@color/mainBackgroundColorRM">

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


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:fontFamily="sans-serif"
            android:text="Spaghette"
            android:textAlignment="center"
            android:textColor="#000000"
            android:textSize="32sp" />


        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="12dp"
            android:layout_marginEnd="8dp"
            android:background="@color/buttonColorRM"
            app:cardPreventCornerOverlap="false"
            app:cardCornerRadius="8dp"
            app:cardElevation="20dp">

            <!-- Here add the Contact Details-->
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:paddingStart="32dp"
                android:paddingTop="8dp"
                android:paddingEnd="32dp"
                android:paddingBottom="8dp">
                <!-- Here add the time value -->
                <TextView
                    android:id="@+id/text_view_duration_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:text="10 minute"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
                    android:textColor="#000000">
                </TextView>

                <!-- Here add the portii value -->
                <TextView
                    android:id="@+id/text_view_servings_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_duration_value"
                    android:layout_alignParentEnd="true"
                    android:text="@string/Servings_VALUE_demo"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000">
                </TextView>

                <!-- Duration is here-->
                <TextView
                    android:id="@+id/text_view_duration"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/text_duration_ViewRecipe"
                    android:layout_toStartOf="@id/text_view_duration_value"
                    android:layout_alignParentStart="true"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold">
                </TextView>

                <!-- Time is here-->
                <TextView
                    android:id="@+id/text_view_portii"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_duration"
                    android:text="@string/text_servings_ViewRecipe"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold">

                </TextView>

            </RelativeLayout>

        </androidx.cardview.widget.CardView>

        <!-- Ingredients -->
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="12dp"
            android:background="@color/buttonColorRM"
            app:cardElevation="20dp"
            app:cardPreventCornerOverlap="false"
            app:cardCornerRadius="8dp">

            <!-- Here add the Contact Details-->
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="8dp"
                android:paddingStart="32dp"
                android:paddingEnd="32dp"
                >

                <!-- Duration is here-->
                <TextView
                    android:id="@+id/text_view_ingredients"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="  Incrediente:"
                    android:layout_alignParentStart="true"
                    android:ellipsize="end"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold"
                    android:drawableStart="@drawable/list_icon">
                </TextView>

                <!-- Time is here-->
                <TextView
                    android:id="@+id/text_view_ingredients_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_ingredients"
                    android:text="Incredient 1, incredient 2, altul mai unul si ai unul"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
                    android:textColor="#000000">

                </TextView>

            </RelativeLayout>
        </androidx.cardview.widget.CardView>

        <!-- Recipe -->
        <androidx.cardview.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="12dp"
            android:background="@color/buttonColorRM"
            app:cardElevation="20dp"
            app:cardPreventCornerOverlap="false"
            app:cardCornerRadius="8dp">

            <!-- Recipe description is here-->
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:paddingTop="8dp"
                android:paddingBottom="8dp"
                android:paddingStart="32dp"
                android:paddingEnd="32dp"
                >

                <!-- Duration is here-->
                <TextView
                    android:id="@+id/text_view_recipe"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/text_view_descriere_ViewRecipe"
                    android:layout_alignParentStart="true"
                    android:ellipsize="end"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
                    android:textColor="#000000"
                    android:textStyle="bold"
                    android:drawableStart="@drawable/description_icon">
                </TextView>

                <!-- Time is here-->
                <TextView
                    android:id="@+id/text_view_recipe_value"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_below="@id/text_view_recipe"
                    android:text="@string/demo_reteta"
                    android:textAppearance="@android:style/TextAppearance.DeviceDefault.Medium"
                    android:textColor="#000000">
                </TextView>

            </RelativeLayout>
        </androidx.cardview.widget.CardView>

    </LinearLayout>

</ScrollView>

推荐阅读