【问题标题】:failed to find style 'cardView Style' in current theme在当前主题中找不到样式“cardView Style”
【发布时间】:2018-08-15 15:10:04
【问题描述】:

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

failed to find style 'cardView Style' in current theme

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

我已将支持库版本恢复为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 没有这样的错误。错误完全消失了。

【问题讨论】:

  • 显示你的 gradle 文件
  • Gradle 文件已更新 @AbhinavGupta
  • 对我来说,解决方案是删除 gradle 缓存并清理重建项目。问题显然出在 Gradle 与缓存数据的链接过程中。

标签: android kotlin android-gradle-plugin rendering android-support-library


【解决方案1】:

查看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 频道)上,错误消失了。

【讨论】:

  • 更新到android studio 3.1后来到这里,所以对我来说它不是固定的。
  • @Odys 好的,现在我明白了,我没有注意到布局预览中的错误仍然存​​在,但是,CardView 渲染时没有解决方法,你有同样的情况吗?
  • 您的第一个建议是正确的,并且解决了 Android Studio v3.1 中存在的问题
  • @Odys 我不明白一件事,我现在使用的是 3.1,我可以在没有解决方法的情况下在预览中看到 CardView,但我仍然看到单击 ! 时记录的错误.你在 3.1 上根本看不到 CardView 吗?
  • 工作 1 对我有用。我正在使用安卓工作室 3.1.3
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    CardView27.1.1 更新为 28.0.0-alpha3 为我在 AS 3.1.3 上修复了 XML 预览。

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

    它仍然会抱怨,但它会呈现预览。

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

    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 也可以防止出现问题。可能会升级到28.0.0,然后使用Android Studio 3.2

    【讨论】:

    • @Dev 最好迁移到androidx.cardview:cardview:1.0.0(等于28.0.0 final)。这些alphabetarcversion 从来都不是“稳定的”。
    【解决方案4】:

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

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

    在我的 styles.xml 文件中。但它显示警告“资源@style/CardView 在com.android.support:design 中被标记为私有”。

    所以,在那之后我尝试了这个

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 2018-12-05
      • 2018-08-23
      • 2011-11-14
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多