Ошибка при добавлении CardView в макет

Я хотел попробовать новые игрушки, которые дал нам Google, и я столкнулся с некоторыми проблемами.

Вот мой 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, я получаю ошибку рендеринга:

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, и, хотя все компилируется нормально, в макете не отображается карта. Пожалуйста, помогите!

P.s. Я использую новую версию Android Studio beta 0.8.0

Ответ 1

Это ошибка в Android Studio, см. https://code.google.com/p/android/issues/detail?id=79071

Один из комментариев патча гласит: "Это привело к сбою отображения вида карты. CardView объявил стили формы CardView.Dark, из-за которой сгенерированный класс R не смог загрузить".

Следующая версия должна быть исправлена ​​в соответствии с сообщением об ошибке (патч находится на отраслевой студии-1.0-dev). Говорят, что один раз проект был создан как обходной путь, но это не исправляет его для меня (хотя у меня точно такая же ошибка и трассировка стека).

Ответ 2

Мне удалось заставить его работать над эмулятором, изменив мой build.gradle на это:

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

Убедитесь, что у вас установлен репозиторий поддержки из диспетчера SDK! Надеюсь, что это поможет

EDIT: как кто-то предложил использовать "com.android.support:cardview-v7:23.1", это лучше, но это не требуется.

Ответ 3

попробуйте добавить эту строку в свой RelativeLayout

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

Ответ 4

Он решил меня, добавив 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

Мне удалось заставить это работать, добавив следующее в мой build.gradle: компилировать 'com.android.support:cardview-v7:21. +'

Надеюсь, что это поможет.

Ответ 6

Попробуйте добавить это в свой файл build.gradle

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