【问题标题】:Android CardView: Why the corners are not round?Android CardView:为什么角落不圆?
【发布时间】:2020-06-13 11:38:28
【问题描述】:

解决了!

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

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 模块应用文件

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'
}

【问题讨论】:

  • 删除这一行:app:cardPreventCornerOverlap="false"
  • @Jason 我删除了它,但仍然没有圆角
  • 您在哪个 API 上运行应用程序?
  • 嗨,@GabrieleMariotti 我更新了描述:)
  • @GabrieleMariotti API 级别 29

标签: android android-layout android-cardview


【解决方案1】:

您的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>

【讨论】:

  • 你好@Dinesh!感谢您的回答!我根据您的解决方案进行了更改,但仍然没有将它们显示为圆形。还有什么想法吗?
  • 另外,是的,如果我将背景颜色放入布局中,那么您的解决方案是正确的,那么卡片将不会(“看到”)四舍五入。您的解决方案有效,加上依赖 implementation 'com.google.android.material:material:1.1.0'
【解决方案2】:

好吧,我终于在做另一件事的同时做到了。我想将我的 EditTexts 更改为具有浮动标签。当我添加以下依赖项时。

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

CardViews 的角也变圆了。

同样重要的是要提到@Dinesh 所说的也应该完成。 您需要在卡片视图上设置背景颜色,而不是在其内部布局上,否则,它将“覆盖”它的角落,您不会将它们视为圆角。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2018-03-16
    • 2020-11-14
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多