gpt4 book ai didi

java.lang.IllegalStateException 您需要在此 Activity 中使用 Theme.AppCompat 主题(或后代)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:59 25 4
gpt4 key购买 nike

问候我的开发者 friend 们!

我创建了一个演示应用程序来测试 minSdk 14 和 targetSdj 23 的 Material 设计。我在下面有以下文件。它在 21 API 以下工作正常。我认为罪魁祸首是 Styles-v21.xml,因为该应用在此之前运行良好。

设置简单,只需一项 Activity 。我正在测试 Material 主题和 AppCompat 主题以处理以下场景。

  1. API 低于 21 的 Theme.AppCompat。
  2. API 21 和 21+ 的主题。

该应用程序在 API 21 以下运行良好,但高于 21+ 应用程序崩溃并显示“不幸的是 materialTest 已停止。”

错误如下:

FATAL EXCEPTION: main
Process: net.slidenerd.materialtest, PID: 28204
java.lang.RuntimeException: Unable to start activity ComponentInfo{net.slidenerd.materialtest/net.slidenerd.materialtest.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.AppCompatDelegateImplV7.createSubDecor(AppCompatDelegateImplV7.java:340)
at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:309)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:273)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at net.slidenerd.materialtest.MainActivity.onCreate(MainActivity.java:12)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

MainActivity.java

package net.slidenerd.materialtest;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

样式.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>

</style>

</resources>

Styles-v21.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:colorPrimary">@color/colorPrimary</item>
<item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:colorAccent">@color/colorAccent</item>

</style>

</resources>

list .xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.slidenerd.materialtest">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">

<activity android:name=".MainActivity"
android:theme="@style/AppTheme"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

解决方案:我通过扩展 Activity 而不是 AppCompatActivity 解决了这个问题,应用程序在 API 14+ 到 API 23 上都运行良好。但是,你能证明这个问题的首选解决方案是合理的吗?

产生错误所需的所有代码都在上面。

注意:要产生错误,MainActivity 应该扩展 AppCompatActivity 并且您应该在 API 21 或更高版本上运行。

谁能解释这里发生的理想情况,以便理解潜在的问题?

谢谢!

最佳答案

如果您的 Activity 扩展自 AppCompatActivity 是强制性的,则您的 Activity 主题必须是 Theme.AppCompat 主题(或后代)

如果您想使用其他主题,请不要从 AppCompatActivity 扩展,您将停止接收 java.lang.IllegalStateException

希望对您有所帮助!!

关于java.lang.IllegalStateException 您需要在此 Activity 中使用 Theme.AppCompat 主题(或后代),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36076515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com