использование AppCompat-21 при сбое устройства Lollipop

Недавно я обновил свой Nexus 5 до Lollipop. и я создаю приложение, используя AppCompat-21. Стили под values-v21 следующие:

<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light">
    </style>
</resources>

но когда я запускаю приложение, оно вылетает с информацией:

Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.

вот мой build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "geone.businspector"
        minSdkVersion 11
        targetSdkVersion 21
        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:appcompat-v7:21.0.0'
}

Он отлично работает под устройством pre-Lollipop...

Я много гуглил и не нашел хорошего решения. кто-нибудь встречал это раньше? PS: я использую Android Studio 0.8.14, и я новичок в Android Studio. спасибо.


person Jaden Gu    schedule 18.11.2014    source источник


Ответы (3)


В ошибке четко указано, что вы используете не ту тему. Действия, которые вы используете, относятся к пакету android.support, для них нужна тема ThemeCompat, а не Theme.Material.Light, которая предназначена для действий из пакета android.app. Перепишите тему следующим образом:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat">
    </style>
</resources>

И эта ошибка исчезнет.

person aga    schedule 18.11.2014
comment
Спасибо за ответы. но этот стиль имеет значение-v21 и автоматически создается Android Studio... - person Jaden Gu; 18.11.2014
comment
@JerryGu вам нужно удалить стили в значении-21, потому что они могут использоваться только android.app.Activity и его потомками. - person aga; 18.11.2014
comment
предложение Google здесь. Определите альтернативные стили: developer.android.com/training/material/compatibility .html. мое устройство - леденец, и я думаю, что оно должно использовать value-v2l. Я ошибаюсь? - person Jaden Gu; 18.11.2014
comment
@JerryGu вы можете либо использовать собственные действия Android, определенные в пакете android.app, и в этом случае вы можете переопределить стили в папке value-21, ИЛИ вы можете придерживаться действий, определенных в пакете android.support. в последнем случае вы не сможете переопределить стили в папке values-21, т.к. действия поддержки работают ТОЛЬКО с темой Theme.AppCompat; Theme.Holo, Theme.Material и тому подобное относятся к действиям в android.app. - person aga; 18.11.2014

В вашем values/styles.xml вы должны использовать Theme.AppCompat.Light. Используйте ту же родительскую тему для вашего values-v21/styles.xml. > также. Это избавит от ошибки, как это было для меня.

На устройствах Lollipop тема работает так, как должна, так что не беспокойтесь :)

person Suleiman19    schedule 06.04.2015

Итак, у меня была та же проблема, и я так устал гуглить и видеть, как люди говорят не использовать материальную тему. Без использования Material Theme панель действий становится серой, даже если вы устанавливаете для нее цвет в стилях.

В любом случае, исправление заключается в том, что шаблоны Android, созданные студией Android, используют import android.support.v7.app.ActionBarActivity; вместо импорта android.app.Activity; и расширить ActionBarActivity вместо активности для основного класса. Просто измените основной класс, чтобы расширить Activity вместо ActionBarActivity. Конечно, нужно будет внести дополнительные изменения, если вы не используете пустое действие.

person Anthony W    schedule 13.04.2015