You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API 21及以下设备CardView不显示问题求助

CardView 在 API 21 及以下设备无法显示的排查与解决建议

问题描述

我的应用在API 22及以上设备中CardView可正常显示,但在API 21及以下设备中无法显示。已在Gradle文件中添加Google Maven仓库,尝试多种替代方案仍未解决,布局代码如下:

<?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" android:background="#CFD8DC" tools:context="com.example.ninjathegreat.ligaocitysolidwastemanagementv20.MainActivity">
    <LinearLayout android:orientation="vertical" android:weightSum="10" android:layout_width="match_parent" android:layout_height="wrap_content">
        <include layout="@layout/app_bar" android:id="@+id/app_bar" />
        <RelativeLayout android:id="@+id/relativeID" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" />
        <TextView android:id="@+id/eswm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/eswm" android:layout_gravity="center" android:textSize="34sp" />
        <GridLayout android:layout_marginTop="50dp" android:id="@+id/mainGrid" android:layout_width="match_parent" android:layout_height="412dp" android:layout_weight="8" android:alignmentMode="alignMargins" android:columnCount="2" android:columnOrderPreserved="false" android:padding="14dp" android:rowCount="3">
            <!-- Row 1 -->
            <!-- Column 1 -->
            <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="0dp" android:layout_columnWeight="1" android:layout_marginBottom="16dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_rowWeight="1" app:cardCornerRadius="8dp" app:cardElevation="8dp">
                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|center_vertical" android:layout_margin="16dp" android:orientation="vertical">
                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableTop="@drawable/gps" android:padding="5dp" android:text="@string/gps" android:textAlignment="center" android:textColor="#020202" android:textStyle="bold" />
                </LinearLayout>
            </android.support.v7.widget.CardView>
            <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="0dp" android:layout_columnWeight="1" android:layout_marginBottom="16dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_rowWeight="1" app:cardCornerRadius="8dp" app:cardElevation="8dp">
                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|center_vertical" android:layout_margin="16dp" android:orientation="vertical">
                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableTop="@drawable/recycle" android:padding="5dp" android:text="@string/educational_guide" android:textAlignment="center" android:textColor="#020202" android:textStyle="bold" />
                </LinearLayout>
            </android.support.v7.widget.CardView>
            <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="0dp" android:layout_columnWeight="1" android:layout_marginBottom="16dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_rowWeight="1" app:cardCornerRadius="8dp" app:cardElevation="8dp">
                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|center_vertical" android:layout_margin="16dp" android:orientation="vertical">
                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableTop="@drawable/calendar_2" android:padding="5dp" android:text="@string/waste_schedule" android:textAlignment="center" android:textColor="#020202" android:textStyle="bold" />
                </LinearLayout>
            </android.support.v7.widget.CardView>
            <android.support.v7.widget.CardView android:layout_width="0dp" android:layout_height="0dp" android:layout_columnWeight="1" android:layout_marginBottom="16dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:layout_rowWeight="1" app:cardCornerRadius="8dp" app:cardElevation="8dp">
                <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|center_vertical" android:layout_margin="16dp" android:orientation="vertical">
                    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableTop="@drawable/info" android:padding="5dp" android:text="@string/information_1" android:textAlignment="center" android:textColor="#020202" android:textStyle="bold" />
                </LinearLayout>
            </android.support.v7.widget.CardView>
        </GridLayout>
    </LinearLayout>
</ScrollView>

可能的原因及解决建议

1. 低版本API对cardElevation的兼容问题

API 21及以下的Android系统不支持原生elevation属性,你使用的app:cardElevation虽为Support库属性,但低版本下若未配合兼容padding设置,可能导致CardView被挤压或隐藏。

解决方法:
给每个CardView添加app:cardUseCompatPadding="true",该属性会在低版本中自动添加与elevation对应的padding,确保CardView内容不被裁剪:

<android.support.v7.widget.CardView 
    ...
    app:cardElevation="8dp"
    app:cardUseCompatPadding="true">

2. 未设置CardView背景色

API 21及以下的CardView默认背景可能与页面背景色(#CFD8DC)一致,导致视觉上看起来未显示。

解决方法:
显式设置CardView的背景色:

<android.support.v7.widget.CardView 
    ...
    app:cardBackgroundColor="@android:color/white">

3. GridLayout在低版本的权重支持问题

你使用的GridLayout的layout_columnWeight和layout_rowWeight在API 21及以下系统中可能存在兼容性问题,导致CardView尺寸计算错误,显示为0dp。

解决方法:

  • 替换GridLayout为LinearLayout结合权重实现网格布局,或使用ConstraintLayout构建更兼容的布局;
  • 临时给CardView设置固定最小宽高(如android:minWidth="150dp"、android:minHeight="150dp"),验证是否为尺寸计算问题。

4. Support库版本或依赖问题

你使用的旧版android.support.v7.widget.CardView可能存在低版本兼容bug,建议迁移到AndroidX库,其对低版本兼容性更好。

解决方法:

  1. 在Gradle中替换依赖为AndroidX的CardView:
implementation 'androidx.cardview:cardview:1.0.0'
  1. 布局中替换CardView引用为androidx.cardview.widget.CardView:
<androidx.cardview.widget.CardView 
    ...>

5. 主题未继承AppCompat主题

Support库控件需依赖AppCompat主题才能正常工作,若Activity主题继承自普通Theme.Light而非Theme.AppCompat系列,可能导致低版本控件显示异常。

解决方法:
在AndroidManifest.xml中确保Activity主题继承自AppCompat:

<activity
    android:name=".MainActivity"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

内容的提问来源于stack exchange,提问作者JOSELITO BROMA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:50:30