【问题标题】:using AppCompat-21 on Lollipop device crashes在 Lollipop 设备上使用 AppCompat-21 崩溃
【发布时间】:2014-11-18 08:02:06
【问题描述】:

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

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

我搜索了很多,但没有好的解决方案。有人遇到过这个吗? ps:我使用的是 Android Studio 0.8.14,我是 Android Studio 的新手。谢谢。

【问题讨论】:

    标签: android android-studio android-5.0-lollipop android-appcompat build.gradle


    【解决方案1】:

    错误清楚地表明您使用了错误的主题。您正在使用的活动来自android.support 包,这些活动需要ThemeCompat 主题,而不是Theme.Material.Light,它用于android.app 包中的活动。像这样重写你的主题:

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

    这个错误就会消失。

    【讨论】:

    • 感谢您的回答。但这种风格在 value-v21 中,它是由 Android Studio 自动生成的......
    • @JerryGu 您需要删除 value-21 中的样式,因为它们只能被 android.app.Activity 及其后代使用。
    • google 的建议在这里。定义替代样式:developer.android.com/training/material/compatibility.html。我的设备是棒棒糖,我认为它应该使用 value-v2l。我错了吗?
    • @JerryGu 您可以使用android.app 包中定义的原生android 活动,在这种情况下,您可以覆盖value-21 文件夹中的样式,或者您可以坚持使用@ 中定义的活动987654330@ 包。在后一种情况下,您不能覆盖 values-21 文件夹中的样式,因为支持活动仅适用于 Theme.AppCompat 主题; Theme.Holo、Theme.Material等是针对android.app的活动。
    【解决方案2】:

    在您的 values/styles.xml 下,您将使用 Theme.AppCompat.Light 也为您的 values-v21/styles.xml 使用相同的父主题。这将像对我一样消除错误。

    在 Lollipop 设备上,主题的工作方式与实际情况一样,所以不用担心 :)

    【讨论】:

      【解决方案3】:

      所以我遇到了同样的问题,我厌倦了谷歌搜索并看到人们说不要使用 Material Theme。即使您在样式中为其设置了颜色,不使用 Material Theme 也会将操作栏变为灰色。

      无论如何,修复是android studio创建的android模板使用import android.support.v7.app.ActionBarActivity;而不是导入android.app.Activity;并扩展 ActionBarActivity 而不是主类的活动。只需更改主类以扩展 Activity 而不是 ActionBarActivity。当然,如果您不使用空白活动,则必须进行更多更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-07
        • 2023-04-11
        • 1970-01-01
        • 2014-12-25
        • 2017-02-23
        • 1970-01-01
        • 2014-12-26
        • 2015-06-08
        相关资源
        最近更新 更多