将CardView添加到布局时出错

时间:2014-06-27 15:46:16

标签: android xml android-cardview

我想尝试谷歌给我们的新玩具,但我遇到了麻烦。

这是我的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:+'
}

现在我的布局:

<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>

当我在android studio中切换到屏幕预览时,出现渲染错误:

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)

我尝试忽略错误并在avd中运行应用程序,虽然一切都编译好,但布局中没有出现cardview。请帮忙!

P.S。我使用的是新的Android Studio beta 0.8.0

7 个答案:

答案 0 :(得分:30)

通过将build.gradle更改为:

,我能够在模拟器上运行它
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:cardview-v7:+'
}

确保从SDK Manager安装了支持存储库! 希望这有帮助

编辑:有人建议使用&#39; com.android.support:cardview-v7:23.1&#39;是一种更好的做法,但不是必需的。

答案 1 :(得分:14)

尝试将此行添加到RelativeLayout

xmlns:card_view="http://schemas.android.com/apk/res-auto"

答案 2 :(得分:5)

它通过添加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>

答案 3 :(得分:3)

我可以通过在build.gradle中添加以下内容来实现此功能: 编译&#39; com.android.support:cardview-v7:21。+&#39;

希望这有帮助。

答案 4 :(得分:2)

这是Android Studio中的错误,请参阅https://code.google.com/p/android/issues/detail?id=79071

补丁的评论之一是:“这导致卡片视图渲染失败.CardView声明了CardView.Dark形式的样式,因为生成的R类无法加载。”

下一个版本应根据错误报告修复此问题(补丁位于branch studio-1.0-dev上)。他们说要将项目构建一次作为解决方法,但这并不能解决它(即使我有完全相同的错误和堆栈跟踪)。

答案 5 :(得分:0)

尝试将此添加到build.gradle文件

dependencies {
...
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
...
}

答案 6 :(得分:0)

转到应用,右键单击:打开模块->设置->依赖关系。

转到“声明的依赖项”,您将在标题下找到“ +”号。

单击“库依赖项”。

搜索“材料”,然后转到“版本部分”。

应用1.0.0,然后单击“确定”。

然后搜索卡片视图,您将获得它和课程

相关问题