在当前主题中找不到样式 'cardView Style'

failed to find style 'cardView Style' in current theme

更新支持库版本后 27.1.0 Android Studio 无法呈现 CardView。它将错误消息显示为

failed to find style 'cardView Style' in current theme

但是编译没有错误,在phone上看到也没有区别。

我已将支持库版本恢复为 27.0.2 并且渲染正常。

支持库或 Android studio 的问题?如何解决这个问题?

应用级别Gradle:

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'realm-android'
apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.tmmmt.tmmmt"
        minSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            buildConfigField 'String', 'FS_CLIENT_ID', FOURSQUARE_CLIENT_ID
            buildConfigField 'String', 'FS_CLIENT_SECRET', FOURSQUARE_CLIENT_SECRET
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            buildConfigField 'String', 'FS_CLIENT_ID', FOURSQUARE_CLIENT_ID
            buildConfigField 'String', 'FS_CLIENT_SECRET', FOURSQUARE_CLIENT_SECRET
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    flavorDimensions "default"

    productFlavors {
        dev {
            dimension "default"
            versionNameSuffix "-dev"
            buildConfigField 'String', 'BASE_URL', BASE_URL_DEV
            manifestPlaceholders = [GEO_API_KEY: GOOGLE_MAP_KEY_DEV]
        }

        beta {
            dimension "default"
            versionNameSuffix "-beta"
            buildConfigField 'String', 'BASE_URL', BASE_URL_BETA
            manifestPlaceholders = [GEO_API_KEY: GOOGLE_MAP_KEY_BETA]
        }

        live {
            dimension "default"
            buildConfigField 'String', 'BASE_URL', BASE_URL_LIVE

            manifestPlaceholders = [GEO_API_KEY: GOOGLE_MAP_KEY_LIVE]
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation "org.jetbrains.anko:anko-common:$anko_version"
    implementation "com.android.support:appcompat-v7:$support_version"
    implementation "com.android.support:support-v13:$support_version"
    implementation "com.android.support:design:$support_version"
    implementation "com.android.support:cardview-v7:$support_version"
    implementation "com.google.firebase:firebase-messaging:$play_version"
    implementation "com.google.android.gms:play-services-maps:$play_version"
    implementation "com.google.android.gms:play-services-location:$play_version"
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    implementation 'com.squareup.retrofit2:retrofit:2.3.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.8.0'
    implementation 'com.squareup.okhttp3:okhttp:3.8.1'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.google.code.gson:gson:2.8.0'
    implementation 'com.wang.avi:library:2.1.3'
    implementation 'com.tmmmt.library:arrowtab:1.3'
    implementation 'com.github.stfalcon:chatkit:0.2.2'
    implementation 'com.amazonaws:aws-android-sdk-core:2.6.16'
    implementation 'com.amazonaws:aws-android-sdk-cognito:2.6.16'
    implementation 'com.amazonaws:aws-android-sdk-s3:2.6.16'
    implementation 'com.orhanobut:logger:2.1.1'
    implementation 'com.tmmmt.library:animations:0.6'
    implementation 'com.github.bumptech.glide:glide:4.6.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
    compile('io.socket:socket.io-client:1.0.0') {
        exclude group: 'org.json', module: 'json'
    }
    /*Fort*/
    implementation project(':FortSDKv1.4.1')
    implementation 'com.victor:lib:1.0.1'
    implementation 'com.shamanland:fonticon:0.1.8'
    implementation('com.nispok:snackbar:2.11.0') {
        exclude group: 'com.google.android', module: 'support-v4'
    }
    implementation 'com.google.guava:guava:23.0-android'
    implementation 'org.bouncycastle:bcprov-jdk16:1.46'
    implementation 'commons-codec:commons-codec:1.10'
    /*Fort*/
}

apply plugin: 'com.google.gms.google-services'

项目级别Gradle:

buildscript {
    ext.kotlin_version = '1.2.30'
    ext.anko_version = '0.10.1'
    ext.support_version = '27.1.0'
    ext.play_version = '11.8.0'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "io.realm:realm-gradle-plugin:4.3.2"
        classpath 'com.google.gms:google-services:3.1.0'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "https://mymavenrepo.com/repo/eDGOo6Dqr4f6uNA0HoWX/"
            credentials {
                username = 'myMavenRepo'
                password = 'tmmmt123'
            }
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

更新:

Android Studio 3.2 没有这样的错误。错误完全消失了。

查看CardView的来源可以看到构造函数

public CardView(@NonNull Context context, @Nullable AttributeSet attrs) {
    super(context, attrs);
    initialize(context, attrs, 0);
}

已更改为

public CardView(@NonNull Context context, @Nullable AttributeSet attrs) {
    this(context, attrs, R.attr.cardViewStyle);
}

并且库中定义了新属性 cardViewStyle。我猜想 Android Studio 预览不包括库中此属性的值,出于某种原因。我不确定它是否通常会解析库中定义的自定义属性,这是一个错误,还是有意为之。

解决方法 1

解决你的主题中的属性(可能只在调试版本中),这样错误就消失了。 @style/CardView 已在支持库中定义,因此您无需创建样式,只需引用即可。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="cardViewStyle">@style/CardView</item>
</style>

请务必在布局预览和清理构建中使用 AppTheme

解决方法 2

添加带有 tools 命名空间的样式,这样它就不会影响您的生产代码。将记录呈现错误,但无论如何您都会看到 CardView

<android.support.v7.widget.CardView
    tools:style="@style/CardView"
    ...

好消息

Android Studio 3.1 似乎可以正确处理此问题,无需解决方法(尽管布局预览中的错误仍在记录中)。

在 Android Studio 3.2(目前在 Canary 频道)上错误消失了。

在我的例子中,CardView 出错的原因是子 Spinner 的错误列表头属性。除了 failed to find style 'cardView Style' in current theme 错误消息外,我还收到了 Spinner adapter view type count must be 1,因此 CardView 失败的根源出人意料地在于 Spinner 渲染失败。

27.1.1 to 28.0.0-alpha3 更新 CardView 修复了我在 AS 3.1.3 上的 XML 预览。

implementation "com.android.support:cardview-v7:28.0.0-alpha3"

它仍然报错,但它渲染了预览。

现在还有一个新的androidxclass,应该是一样的:

implementation "androidx.cardview:cardview:1.0.0"

com.android.support:design 更新为 28.0.0-alpha3 时,提示:

The resource @style/CardView is marked as private in com.android.support:design

使用 buildTools 27.0.3 和 supportLibrary 27.1.1 降级回 API 27 也可以防止这些问题。然后可能会用 Android Studio 3.2 升级到 28.0.0

我也遇到了同样的问题,所以加了

<item name="cardViewStyle">@style/CardView</item>

在我的 styles.xml 文件中。但它显示警告 "The resource @style/CardView is marked as private in com.android.support:design"。

所以,之后我尝试了这个

<item name="cardViewStyle">@style/CardView.Light</item>

这对我有用。我正在使用 Android Studio 3.1.4 和 Gradle 4.4.