【问题标题】:"You need to use a Theme.AppCompat theme (or descendant) with this activity." [duplicate]“您需要在此活动中使用 Theme.AppCompat 主题(或后代)。” [复制]
【发布时间】:2018-06-05 07:50:40
【问题描述】:

我是 Android 编程新手,遇到了一个简单的 XML 问题。我正在尝试将我的一项空活动变成全屏活动。我尝试添加这行代码 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 进入我的 android 清单文件,这最终导致我的应用程序在启动时崩溃。

如果这也有帮助,我的受影响活动的 java 文件将扩展 AppCompatActivity。我看到其他一些帖子提到这会产生问题,但我无法解决我的问题。

请帮助我解决此问题,同时仍使活动全屏显示。任何帮助表示赞赏。谢谢!

XML

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.AppCompat.Light">
    <activity android:name=".MainActivity"
        android:label="Marks Calculator">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.APP_CALCULATOR" />
        </intent-filter>
    </activity>
    <activity android:name=".Home_Activity"
        android:label="Finite Time Manager">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.HOME" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Welcome_Activity"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        </activity>
</application>

错误日志

12-22 12:21:30.214 32475-32475/com.managergmail.time.finite.finitemanager02 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.managergmail.time.finite.finitemanager02, PID: 32475
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.managergmail.time.finite.finitemanager02/com.managergmail.time.finite.finitemanager02.Welcome_Activity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2647)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5763)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
    Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
    at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:359)
    at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328)
    at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:289)
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
    at com.managergmail.time.finite.finitemanager02.Welcome_Activity.onCreate(Welcome_Activity.java:17)
    at android.app.Activity.performCreate(Activity.java:6280)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1116)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2534)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2647)
    at android.app.ActivityThread.-wrap11(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1502)
    at android.os.Handler.dispatchMessage(Handler.java:111)
    at android.os.Looper.loop(Looper.java:207)
    at android.app.ActivityThread.main(ActivityThread.java:5763)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

【问题讨论】:

  • 抱歉我是不是在某个地方弄错了?如果是这样,请告诉我,以便我修复它

标签: java android


【解决方案1】:

您的Welcome_Activity 可能扩展了AppCompatActivity,所以主题应该是appcompat 主题。

在你的styles.xml文件中放这个:

<style name="AppTheme.FullScreen" parent="@style/Theme.AppCompat.Light">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

现在你可以使用这个主题了:

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

这将为此特定活动应用全屏主题。如果您想全屏显示整个应用程序,您只需将清单中的应用程序主题替换为此主题即可。

【讨论】:

  • 这对我有用!谢谢!
【解决方案2】:

您当前选择的主题(在欢迎活动中)不是 appcompat 主题。 例如,这个应该可以工作:'

@style/Theme.AppCompat.Light.NoActionBar.FullScreen

【讨论】:

  • 我在我的 android 清单中尝试过,但它给了我“无法解析符号”错误消息。这是我当前的代码行&lt;activity android:name=".Welcome_Activity" android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen"&gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;/activity&gt;
  • 您可以从输入@style/Theme.AppCompat 开始,然后查看在此处放置一个点后出现的可用选项。
猜你喜欢
  • 2014-03-15
  • 2015-11-27
  • 2016-07-04
  • 2016-05-16
  • 1970-01-01
相关资源
最近更新 更多