在Lollipop设备上使用AppCompat-21崩溃

Jad*_* Gu 3 android android-appcompat android-studio build.gradle android-5.0-lollipop

最近我将我的nexus 5升级为Lollipop.我使用AppCompat-21创建了一个应用程序.值-v21下的样式如下

<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light">
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

但是当我运行应用程序时,它崩溃了信息:

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

这是我的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'
}
Run Code Online (Sandbox Code Playgroud)

它在Lollipop之前的设备下运行良好......

我google了很多,并没有很好的解决方案.以前有人见过这个吗?ps:我使用的是Android Studio 0.8.14,而且我是Android Studio的新手.谢谢.

aga*_*aga 5

该错误清楚地表明您使用了错误的主题.您正在使用的活动是从android.support包装,这些活动都需要一个ThemeCompat主题,不Theme.Material.Light,这是在活动android.app包.像这样重写你的主题:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat">
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

而这个错误将消失.

  • @JerryGu你可以使用`android.app`包中定义的原生android活动,在这种情况下你可以覆盖`value-21`文件夹中的样式,或者你可以坚持`android.support`中定义的活动包.在后一种情况下,您不能覆盖`values-21`文件夹中的样式,因为支持活动仅适用于`Theme.AppCompat`主题; `Theme.Holo`,`Theme.Material`等用于`android.app`中的活动. (2认同)