更新支持库版本27.1.0
Android Studio 后无法呈现CardView。它将错误消息显示为
failed to find style 'cardView Style' in current theme
但是在电话中看到编译没有错误,也没有区别。
我已将支持库版本还原为27.0.2
并且它正常呈现。
支持库或 Android studio 的问题?如何解决这个问题?
App Level 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
没有此类错误。错误完全消失了。
答案 0 :(得分:91)
检查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频道)中,错误消失了。
答案 1 :(得分:9)
我也有同样的问题,所以我加了
<item name="cardViewStyle">@style/CardView</item>
在我的styles.xml文件中。但是它显示警告“ com.android.support:design中资源@ style / CardView被标记为私有”。
所以,在那之后我尝试了这个
<item name="cardViewStyle">@style/CardView.Light</item>
这对我有用。我正在使用Android Studio 3.1.4和Gradle 4.4。
答案 2 :(得分:4)
将CardView
从27.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也可以避免该问题。然后可以使用Android Studio 3.2升级到28.0.0
。
答案 3 :(得分:1)
在我的情况下,CardView出错的原因是因为子Spinner的listheader属性错误。除了failed to find style 'cardView Style' in current theme
错误消息,我得到Spinner adapter view type count must be 1
,因此CardView失败的根源在Spinner渲染失败时出乎意料。