问题
I wanted to try out the new toys that google gave us and I've run into some trouble.
Here is my build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 'android-L'
buildToolsVersion "20.0.0"
defaultConfig {
applicationId "com.tod.android.lpreviewtest"
minSdkVersion 'L'
targetSdkVersion 'L'
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:cardview-v7:+'
}
Now my layout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MyActivity">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_gravity="center"
android:layout_width="200dp"
android:layout_height="200dp"
card_view:cardCornerRadius="4dp">
<TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v7.widget.CardView>
</RelativeLayout>
When I switch to screen preview in android studio, I get a render error:
Rendering Problems The following classes could not be instantiated:
- android.support.v7.widget.CardView (Open Class, Show Exception)
Exception Details java.lang.ClassFormatError: Illegal field name "CardView.Dark"
in class android/support/v7/cardview/R$style at
java.lang.ClassLoader.defineClass1(ClassLoader.java:-2) at
java.lang.ClassLoader.defineClass(ClassLoader.java:792) at
java.lang.ClassLoader.defineClass(ClassLoader.java:635) at
java.lang.ClassLoader.loadClass(ClassLoader.java:424) at
java.lang.ClassLoader.loadClass(ClassLoader.java:411) at
java.lang.ClassLoader.loadClass(ClassLoader.java:357) at
android.support.v7.widget.CardView.initialize(CardView.java:69) at
android.support.v7.widget.CardView.<init>(CardView.java:60) at
java.lang.reflect.Constructor.newInstance(Constructor.java:526) at
android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:802) at
android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) at
android.view.LayoutInflater.rInflate(LayoutInflater.java:778) at
android.view.LayoutInflater.inflate(LayoutInflater.java:500) at
android.view.LayoutInflater.inflate(LayoutInflater.java:381)
I tried ignoring the error and running the app in an avd and while everything compiles fine, no cardview appears in the layout. Please help!
P.s. I'm using the new Android Studio beta 0.8.0
回答1:
This is a bug in Android Studio, see https://code.google.com/p/android/issues/detail?id=79071
One of the comments of the patch reads: "This was causing card view rendering to fail. CardView declared styles of the form CardView.Dark due to which the generated R class failed to load."
Next version should have this fixed according to the bug report (the patch is on branch studio-1.0-dev). They say to build the project once as a workaround, but this does not fix it for me (even though I have exactly the same error and stack trace).
回答2:
I was able to get it to work on the emulator by changing my build.gradle to this:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:cardview-v7:+'
}
Make sure you have the support repository installed from the SDK Manager! Hope this helps
EDIT: as someone suggested using 'com.android.support:cardview-v7:23.1' is a better practice but it not required.
回答3:
try adding this line to your RelativeLayout
xmlns:card_view="http://schemas.android.com/apk/res-auto"
回答4:
It solved me by adding xmlns:card_view="http://schemas.android.com/apk/res-auto"
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:card_view="http://schemas.android.com/apk/res-auto"> --->> ******
....
...
<android.support.v7.widget.CardView>
..
...
.....
</android.support.v7.widget.CardView>
</LinearLayout>
回答5:
I was able to get this to work by adding the following to my build.gradle: compile 'com.android.support:cardview-v7:21.+'
Hope this helps.
回答6:
Try adding this to your build.gradle file
dependencies {
...
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
...
}
来源:https://stackoverflow.com/questions/24455867/error-when-adding-cardview-to-layout