Après la mise à jour de la version de la bibliothèque de support 27.1.0
Android 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.
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.
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.
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.
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.