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

Android应用启动崩溃:TextView加载失败问题求助

问题背景

我开发的com.bookreader.android应用启动页在Android Studio布局预览正常,但运行时直接崩溃,抛出异常:

FATAL EXCEPTION: main Process: com.bookreader.android, PID: 9970 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bookreader.android/com.bookreader.android.LauncherActivity}: android.view.InflateException: Binary XML file line #17 in com.bookreader.android:layout/activity_launcher: Binary XML file line #17 in com.bookreader.android:layout/activity_launcher: Error inflating class TextView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3676) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)

移除布局中的TextView后应用可正常运行,更换主题无法解决问题。相关代码如下:

布局文件 activity_launcher.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fff"
    android:orientation="vertical">


    <ImageView
        android:id="@+id/app_logo"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true"
        android:layout_gravity="center_horizontal"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/app_logo"
        android:gravity="center"
        android:text="@string/app_name"
        android:textColor="@color/colorPrimary"
        android:textSize="22dp" />

    <TextView
        android:id="@+id/version"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:padding="10dp"
        android:text="V1.0"
        android:textColor="#cc000000" />

</RelativeLayout>

LauncherActivity.java

public class LauncherActivity extends BaseActivity {

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

        TextView version = findViewById(R.id.version);
        version.setText("V" + BuildConfig.VERSION_NAME);
    }
}

使用的主题

<!-- Base application theme. -->
<style name="Theme.App" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- Primary brand color. -->
    <item name="colorPrimary">@color/color_primary</item>
    <item name="colorPrimaryVariant">@color/color_primary_variant</item>
    <item name="colorOnPrimary">@color/white</item>
    <!-- Secondary brand color. -->
    <item name="colorSecondary">@color/color_secondary</item>
    <item name="colorSecondaryVariant">@color/color_secondary_variant</item>
    <item name="colorOnSecondary">@color/black</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
    <!-- Customize your theme here. -->
    <item name="android:navigationBarColor">@color/white</item>
    <item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">true</item>
</style>

请教问题:

  1. 该崩溃问题的原因是什么?
  2. 为何移除TextView后应用正常,更换主题无效?
  3. 是否是TextView类存在问题?
  4. 如何解决该问题?

问题解答
  1. 崩溃原因:
    布局中第一个TextView的textColor引用了@color/colorPrimary,但你的主题里colorPrimary指向的是@color/color_primary(下划线命名),而你并没有定义名为colorPrimary的颜色资源,资源名称不匹配导致XML解析时找不到对应颜色,触发InflateException。

  2. 移除TextView正常、换主题无效的原因:

    • 移除TextView后,布局不再引用那个错误的颜色资源,自然不会触发资源找不到的异常,应用就能正常启动。
    • 更换主题没用是因为问题不在主题本身,而是布局里的资源引用和实际存在的资源名称不匹配,主题里的colorPrimary是属性引用,和你布局里直接写的@color/colorPrimary不是一回事。
  3. TextView类是否有问题:
    不是TextView类的问题,它是Android系统标准控件,异常完全是你的资源引用错误导致的。

  4. 解决方法:
    两种可选方案:

    • 方案一:修改布局中TextView的textColor为主题属性引用:将android:textColor="@color/colorPrimary"改成android:textColor="?attr/colorPrimary",这样会从当前主题中获取colorPrimary对应的颜色值。
    • 方案二:统一资源名称:如果要直接引用颜色资源,要么把布局里的@color/colorPrimary改成@color/color_primary(和colors.xml里的定义一致),要么在colors.xml中添加<color name="colorPrimary">...</color>的定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:01:28