web-dev-qa-db-fra.com

Impossible de trouver le style 'style CardView' dans le thème actuel

Après la mise à jour de la version de la bibliothèque de support 27.1.0Android Studio, impossible de restituer CardView. Il affiche un message d'erreur comme

failed to find style 'cardView Style' in current theme

Mais pas d'erreur de compilation et pas de différence en regardant au téléphone.

J'ai rétabli la version de la bibliothèque de support en 27.0.2 et le rendu est correct.

Le problème avec la bibliothèque de support ou Android studio? Comment régler ceci?

Niveau d'application:

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'

Niveau de projet:

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
}

Mise à jour:

Il n'y a pas d'erreur de ce type dans Android Studio 3.2. L'erreur était complètement partie.

48
Bhuvanesh BS

En vérifiant la source de CardView on peut voir que le constructeur

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

a été changé en

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

Et le nouvel attribut cardViewStyle est défini dans la bibliothèque. Je suppose que l'aperçu Android Studio n'inclut pas la valeur de cet attribut de la bibliothèque, pour une raison quelconque. Je ne sais pas si cela résout généralement les attributs personnalisés définis dans les bibliothèques et qu'il s'agit d'un bogue, ou si cela est prévu.

Solution de contournement 1

Résolvez l'attribut dans votre thème (peut-être uniquement dans la version de débogage), ainsi l'erreur disparaîtra. @style/CardView est déjà défini dans la bibliothèque de support, vous n'avez donc pas besoin de créer le style, il vous suffit de le référencer.

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

Assurez-vous d'utiliser AppTheme dans l'aperçu de la mise en page et de le construire.

Solution de contournement 2

Ajoutez le style avec l'espace de nom tools afin qu'il n'affecte pas votre code de production. L'erreur de rendu sera enregistrée, mais vous verrez quand même le CardView

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

Bonne nouvelle

Android Studio 3.1 semble gérer cela correctement, aucune solution de contournement n'est nécessaire (l'erreur dans l'aperçu de la mise en page est toujours enregistrée).

Sur Android Studio 3.2 (actuellement dans le canal Canary), l'erreur a disparu.

91
lelloman

J'ai aussi eu le même problème, alors j'ai ajouté

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

dans mon fichier styles.xml. Mais il y avait un avertissement "La ressource @ style/CardView est marquée comme privée dans com.Android.support:design".

Donc, après ça, j'ai essayé celui-ci

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

et cela a fonctionné pour moi. J'utilise Android Studio 3.1.4 et Gradle 4.4.

9
Anirban Das

la mise à jour de la CardView de 27.1.1 à 28.0.0-alpha a corrigé l'aperçu XML pour moi sur AS 3.1.3.

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

il se plaint toujours, mais il rend l'aperçu.

il y a aussi une nouvelle classe androidx , qui devrait être la même:

implementation "androidx.cardview:cardview:1.0.0"

lors de la mise à jour de com.Android.support:design vers 28.0.0-alpha3, il indique:

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

la rétrogradation à l'API 27 avec buildTools 27.0.3 & supportLibrary 27.1.1 empêche également les problèmes. peut passer à 28.0.0 avec Android Studio 3.2 alors.

4
Martin Zeitler

Dans mon cas, l'erreur avec CardView était due à l'attribut de tête de liste incorrect d'un enfant Spinner. En plus du message d'erreur failed to find style 'cardView Style' in current theme, j'ai obtenu Spinner adapter view type count must be 1, de sorte que les racines de l'échec de CardView étaient étonnamment défaillantes dans l'échec du rendu Spinner.

1
Dmitry Nevzorov