Android应用报错‘Error inflating class Button’问题排查求助
问题描述
在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
原因分析
从错误日志核心信息可定位问题:
- 系统尝试加载
res/color/mtrl_btn_text_color_selector.xml资源时,出现文件缺失、损坏或内容格式错误 - 项目使用Material Components主题时,布局中的普通
Button会被自动替换为MaterialButton,但对应的文本颜色选择器资源缺失,或资源中的颜色引用(如?attr/colorOnPrimary)在当前主题中未定义 - 资源编译缓存异常,导致正确的资源未被加载
解决方案
- 检查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
相关产品推荐
相关产品推荐

