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

Android应用报错‘Error inflating class Button’问题排查求助

Android Button控件Inflate报错原因及解决方案

问题描述

在Schedule Activity中使用普通Button控件,点击按钮跳转至另一个Activity进行字段更新与API调用时,触发报错导致Activity无法启动。

相关代码

UpdateSchedule.class

public class UpdateSchedule extends AppCompatActivity {

    Button btnAddRoute, btnAddSource, btnRouteInfo, btnScheduleInfo;

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

        initViews();
    }
}

activity_update_schedule.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    tools:context=".activity.UpdateSchedule">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:background="@android:color/holo_orange_light"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="@drawable/wave__1_"/>

    <Button
        android:id="@+id/add_route"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="80dp"
        android:text="Add Route" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:text="Add Halt"
        android:id="@+id/add_source"/>

    <Button
        android:layout_marginTop="20dp"
        android:id="@+id/btn_route_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="add route info" />

    <Button
        android:id="@+id/btn_schedule_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:text="add schedule info" />

    <!--    <FrameLayout-->
<!--        android:id="@+id/frameLayout_schedule_container"-->
<!--        android:layout_width="match_parent"-->
<!--        android:layout_height="match_parent" />-->


</LinearLayout>

错误日志

FATAL EXCEPTION: main
Process: com.example.sts_admin, PID: 30636
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sts_admin/com.example.sts_admin.activity.UpdateSchedule}: android.view.InflateException: Binary XML file line #25 in com.example.sts_admin:layout/activity_update_schedule: Binary XML file line #25 in com.example.sts_admin:layout/activity_update_schedule: Error inflating class Button
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3846)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4022)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2336)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:246)
    at android.app.ActivityThread.main(ActivityThread.java:8653)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: android.view.InflateException: Binary XML file line #25 in com.example.sts_admin:layout/activity_update_schedule: Binary XML file line #25 in com.example.sts_admin:layout/activity_update_schedule: Error inflating class Button
Caused by: android.view.InflateException: Binary XML file line #25 in com.example.sts_admin:layout/activity_update_schedule: Error inflating class Button
Caused by: android.content.res.Resources$NotFoundException: File res/color/mtrl_btn_text_color_selector.xml from ComplexColor resource ID #0x7f0602a7
    at android.content.res.ResourcesImpl.loadComplexColorForCookie(ResourcesImpl.java:1421)
    at android.content.res.ResourcesImpl.loadComplexColorFromName(ResourcesImpl.java:1247)
    at android.content.res.ResourcesImpl.loadColorStateList(ResourcesImpl.java:1326)
    at android.content.res.Resources.loadColorStateList(Resources.java:1249)
    at android.content.res.TypedArray.getColorStateList(TypedArray.java:600)
    at android.widget.TextView.readTextAppearance(TextView.java:4326)
    at android.widget.TextView.<init>(TextView.java:1360)
    at android.widget.Button.<init>(Button.java:174)
    at android.widget.Button.<init>(Button.java:149)
    at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:81)
    at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:228)
    at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:224)
    at com.google.android.material.theme.MaterialComponentsViewInflater.createButton(MaterialComponentsViewInflater.java:43)
    at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:156)
    at androidx.appcompat.app.AppCompatDelegateImpl.createView(AppCompatDelegateImpl.java:1678)
    at androidx.appcompat.app.AppCompatDelegateImpl.onCreateView(AppCompatDelegateImpl.java:1729)
    at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1059)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:995)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:1121)
    at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1082)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:680)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:532)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
    at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:775)
    at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:197)
    at com.example.sts_admin.activity.UpdateSchedule.onCreate(UpdateSchedule.java:25)
    at android.app.Activity.performCreate(Activity.java:8207)
    at android.app.Activity.performCreate(Activity.java:8191)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3819)
    ... 11 more
Caused by: java.lang.UnsupportedOperationException: Can't convert value at index 0 to color: type=0x1
    at android.content.res.TypedArray.getColor(TypedArray.java:533)
    at android.content.res.ColorStateList.inflate(ColorStateList.java:332)
    at android.content.res.ColorStateList.createFromXmlInner(ColorStateList.java:280)
    at android.content.res.ResourcesImpl.loadComplexColorForCookie(ResourcesImpl.java:1414)
    ... 41 more

原因分析

从错误日志核心信息可定位问题:

  1. 系统尝试加载res/color/mtrl_btn_text_color_selector.xml资源时,出现文件缺失、损坏或内容格式错误
  2. 项目使用Material Components主题时,布局中的普通Button会被自动替换为MaterialButton,但对应的文本颜色选择器资源缺失,或资源中的颜色引用(如?attr/colorOnPrimary)在当前主题中未定义
  3. 资源编译缓存异常,导致正确的资源未被加载

解决方案

  • 检查Material Components依赖:确保app模块的build.gradle中包含正确版本的Material Components依赖,同步后重新编译:
implementation 'com.google.android.material:material:1.9.0'
  • 修复颜色选择器资源:若res/color/mtrl_btn_text_color_selector.xml缺失或损坏,可创建该文件并添加正确内容:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/your_pressed_color" android:state_enabled="true" android:state_pressed="true"/>
    <item android:color="@color/your_focused_color" android:state_enabled="true" android:state_focused="true"/>
    <item android:color="@color/your_enabled_color" android:state_enabled="true"/>
    <item android:color="@color/your_disabled_color"/>
</selector>

将上述颜色值替换为项目中已定义的具体颜色,或使用已在主题中声明的属性。

  • 强制使用原生Button:若无需MaterialButton特性,可在布局中明确指定原生Button类:
<android.widget.Button
    android:id="@+id/add_route"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="80dp"
    android:text="Add Route" />
  • 清理重建项目:执行Build -> Clean Project,再执行Build -> Rebuild Project,清除编译缓存并重新生成资源。
  • 检查主题配置:确保AndroidManifest.xml中UpdateSchedule Activity的主题为Material Components兼容主题,例如:
<activity
    android:name=".activity.UpdateSchedule"
    android:theme="@style/Theme.MaterialComponents.Light.DarkActionBar"/>

内容的提问来源于stack exchange,提问作者dev.darron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:07:07