【问题标题】:Error when adding CardView to layout将 CardView 添加到布局时出错
【发布时间】:2014-06-27 15:46:15
【问题描述】:

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

这是我的 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。请帮忙!

附:我正在使用新的 Android Studio beta 0.8.0

【问题讨论】:

  • 使用完全相同的设置遇到完全相同的问题。
  • 将 card_view 命名空间添加到您的 RelativeLayout xmlns:card_view="http://schemas.android.com/apk/res-auto"

标签: android xml android-cardview


【解决方案1】:

通过将 build.gradle 更改为以下内容,我能够让它在模拟器上运行:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:cardview-v7:+'
}

确保您已从 SDK 管理器安装了支持存储库! 希望这会有所帮助

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

【讨论】:

  • 这绝对是答案。
【解决方案2】:

尝试将此行添加到您的RelativeLayout

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

【讨论】:

  • 这是唯一有效的答案! XML 编辑器只需要一个绑定的命名空间。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    通过将以下内容添加到我的 build.gradle 中,我能够让它工作: 编译'com.android.support:cardview-v7:21.+'

    希望这会有所帮助。

    【讨论】:

      【解决方案5】:

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

      补丁的其中一个 cmets 内容如下:“这导致卡片视图渲染失败。CardView 声明了表单 CardView.Dark 的样式,因此生成的 R 类无法加载。”

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

      【讨论】:

        【解决方案6】:

        尝试将其添加到您的 build.gradle 文件中

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

        【讨论】:

          【解决方案7】:

          进入应用,右键:打开模块->设置->依赖。

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

          单击“库依赖项”。

          搜索“材料”并转到“版本部分”。

          应用 1.0.0 并点击“确定”。

          然后搜索卡片视图你会得到它和类

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多