Ошибка при добавлении 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.+'
...
}