java.lang.IllegalStateException:您需要使用 Theme.AppCompat 主题 - 同时使用 AppCompat 主题

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme - while using the AppCompat theme

我在生产环境中的一个用户遇到了这个异常,在我尝试过的所有手机上的本地构建中都没有发生这种情况,而且我看不出我的配置有什么问题。

堆栈跟踪看起来像:

Message: IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
android.support.v7.app.AppCompatDelegateImplV7.m in SourceFile::2309
android.support.v7.app.AppCompatDelegateImplV7.a in SourceFile::252
android.support.v7.app.AppCompatActivity.setContentView in SourceFile::109
my.package.HomeFragmentActivity.onCreate in SourceFile::80

我的主题定义为:

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

我的清单是:

    <application
    android:name="my.package.Application"
    android:allowBackup="false"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:logo="@drawable/my_logo"
    android:theme="@style/AppTheme">
...
    <activity android:name="my.package.HomeFragmentActivity"
        android:exported="false"
        android:launchMode="singleTask"
        android:screenOrientation="portrait"/>

查看 AppCompatDelegateImplV7 的源代码,如果 windowActionBar 不在主题中,则会抛出此异常,当我浏览 [=41] 的层次结构时,它确实看起来是这样=] 主题.

这是一个稍旧的分支,其中 activity 实际上扩展了已弃用的 ActionBarActivity 而不是 AppCompatActivity,但它似乎只是在幕后使用了 AppCompatActivity 两种方式。

App Compat v23.0.1,用户 运行 使用 Samsung S4 on 5.0.1。

这里可能发生了什么?

EDIT 我的问题与链接的 "duplicate" 问题不同,因为在那个问题中,OP 没有使用 Theme.AppCompat 主题,而我正在使用Theme.AppCompat 主题。

在这上面花了很多时间后,我得出的结论是我的代码没有做错任何事情,我希望这是旧版本支持库及其交互方式中的错误具体 phone.

希望升级到最新的支持库版本可以解决这个罕见的问题。

如果您使用的是 androidx 库,那么这个答案应该有所帮助:

更新自

implementation 'androidx.appcompat:appcompat:1.0.0'

implementation 'androidx.appcompat:appcompat:1.0.2'