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

3

最近我将我的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'
}

它在Lollipop以前的设备上运行良好...

我Google了很多,并没有好的解决方案。有人遇到过这种情况吗?附言:我正在使用Android Studio 0.8.14,而且我是Android Studio的新手。谢谢。

3个回答

5
错误信息明确地指出您正在使用错误的主题。您正在使用的活动来自android.support包,这些活动需要一个ThemeCompat主题,而不是Theme.Material.Light,后者是针对android.app包中的活动的。请按照以下方式重写您的主题:
<resources>
    <style name="AppTheme" parent="Theme.AppCompat">
    </style>
</resources>

这个错误将会被消除。


谢谢回答。但是这个样式在value-v21中,是由Android Studio自动生成的... - Jaden Gu
@JerryGu,你需要删除value-21中的样式,因为它们只能被android.app.Activity及其子类使用。 - aga
谷歌的建议在这里。定义备用样式:https://developer.android.com/training/material/compatibility.html。我的设备是棒棒糖,我认为它应该使用value-v21。我错了吗? - Jaden Gu
2
@JerryGu 你可以使用定义在android.app包中的原生安卓活动,这种情况下你可以在value-21文件夹中覆盖样式,或者你可以坚持使用定义在android.support包中的活动。在后一种情况下,你不能覆盖values-21文件夹中的样式,因为支持活动仅适用于Theme.AppCompat主题;Theme.HoloTheme.Material等是针对android.app中的活动的。 - aga

1
在您的 values/styles.xml 中,您将使用 Theme.AppCompat.Light。 同样,为您的 values-v21/styles.xml 使用相同的父主题。这将消除错误,就像对我一样。 在 Lollipop 设备上,主题的工作方式与实际应该的方式相同,所以不用担心 :)

0

我曾经遇到过同样的问题,厌倦了不停地谷歌搜索并看到别人说不要使用Material Theme。即使在样式中为其设置颜色,不使用Material Theme也会将操作栏更改为灰色。

无论如何,解决方法是Android Studio创建的Android模板使用import android.support.v7.app.ActionBarActivity;而不是import android.app.Activity;,并且将主类扩展为ActionBarActivity而不是activity。只需将主类更改为扩展Activity而不是ActionBarActivity即可。当然,如果您不使用空白活动,则需要进行更多更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接