You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android启动屏创建失败:Theme.AppCompat主题异常求助

问题分析与解决方案

你的崩溃核心原因:MainActivity继承了AppCompatActivity,但当前为它指定的Theme.App.SplashScreen并非AppCompat派生主题,且自定义的installSplashScreen()是空实现,没有正确使用AndroidX启动屏库的逻辑。


步骤1:添加AndroidX SplashScreen依赖

在Module级别的build.gradle中添加启动屏库依赖:

dependencies {
    implementation 'androidx.core:core-splashscreen:1.0.1'
}

步骤2:修正themes.xml配置

调整启动屏主题,使用AndroidX兼容的属性(去掉android:前缀),确保postSplashScreenTheme指向AppCompat派生主题:

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.Almowafarati" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
    </style>

    <style name="Theme.Almowafarati" parent="Base.Theme.Almowafarati" />

    <style name="Theme.App.SplashScreen" parent="Theme.SplashScreen">
        <item name="windowSplashScreenBackground">@color/white</item>
        <item name="windowSplashScreenAnimatedIcon">@drawable/avd_anim</item>
        <item name="windowSplashScreenAnimationDuration">1000</item>
        <!-- 指定启动后切换的AppCompat主题 -->
        <item name="postSplashScreenTheme">@style/Base.Theme.Almowafarati</item>
    </style>
</resources>

步骤3:修正Manifest配置

将应用默认主题设为AppCompat主题,仅给启动的MainActivity临时指定启动屏主题:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Almowafarati"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:theme="@style/Theme.App.SplashScreen"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

步骤4:正确实现MainActivity启动屏逻辑

删除自定义空方法,使用AndroidX库的SplashScreen.installSplashScreen(),且必须在super.onCreate()之前调用:

package com.almowafarati.app;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.splashscreen.SplashScreen;

public class MainActivity extends AppCompatActivity {

    WebView myWeb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // 必须在super.onCreate之前调用
        SplashScreen.installSplashScreen(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Initialize WebView
        myWeb = findViewById(R.id.myWeb);
        myWeb.getSettings().setJavaScriptEnabled(true);
        myWeb.setWebViewClient(new WebViewClient());
        myWeb.loadUrl("https://almowafarati.com");
    }
}

关键注意事项

  • SplashScreen.installSplashScreen(this)的调用顺序必须优先于super.onCreate(savedInstanceState),否则启动屏逻辑不生效。
  • postSplashScreenTheme必须与MainActivity继承的AppCompatActivity匹配,使用AppCompat系列主题。
  • 确保项目中AndroidX库版本兼容,避免版本冲突。

内容的提问来源于stack exchange,提问作者Islam Farrag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:57:18