升级Android Studio Hedgehog后TextView加载InflateException问题
升级Android Studio Hedgehog后InflateException问题排查
问题描述
将Android Studio升级到Hedgehog版本后,Activity在onCreate方法调用setContentView时触发了之前未出现过的InflateException。移除布局中TextView的android:textColor="?attr/colorOnBackground"属性后,TextView可正常加载,且已执行过Invalidate Caches and Restart操作。
错误日志
FATAL EXCEPTION: main Process: de. myapp.myapp_1, PID: 5888 java.lang.RuntimeException: Unable to start activity ComponentInfo{de.myapp.myapp_1/de. myapp.myapp_1.act.MyAppActivity}: android.view.InflateException: Binary XML file line #111 in de. myapp.myapp_1:layout/activity_myappmain: Binary XML file line #111 in de. myapp.myapp_1:layout/activity_myappmain: Error inflating class TextView at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 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:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) Caused by: android.view.InflateException: Binary XML file line #111 in de. myapp.myapp_1:layout/activity_myappmain: Binary XML file line #111 in de. myapp.myapp_1:layout/activity_myappmain: Error inflating class TextView Caused by: android.view.InflateException: Binary XML file line #111 in de. myapp.myapp_1:layout/activity_myappmain: Error inflating class TextView Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f04010f a=-1} at android.content.res.TypedArray.getColorStateList(TypedArray.java:597) at android.widget.TextView.readTextAppearance(TextView.java:3989) at android.widget.TextView.<init>(TextView.java:1089) at android.widget.TextView.<init>(TextView.java:990) at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:113) at androidx.appcompat.widget.AppCompatTextView.<init>(AppCompatTextView.java:108) at androidx.appcompat.app.AppCompatViewInflater.createTextView(AppCompatViewInflater.java:228) at androidx.appcompat.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:148) 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.rInflate(LayoutInflater.java:1124) 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 de. myapp.myapp_1.act.MyAppActivity.onCreate(MyAppActivity.java:258) at android.app.Activity.performCreate(Activity.java:7994) at android.app.Activity.performCreate(Activity.java:7978) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 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:2066) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
对应TextView XML代码
<TextView android:id="@+id/tvTestFunc" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="false" android:gravity="start" android:minHeight="64sp" android:text="tvFuncTest" android:textColor="?attr/colorOnBackground" android:typeface="normal" />
问题根源(Hedgehog版本相关变更)
Android Studio Hedgehog对应的Android Gradle Plugin(AGP)版本为8.2,其中几个关键变更可能导致该问题:
- 主题属性解析严格性提升:旧版本AGP/Android系统会对未定义的主题属性进行静默 fallback(比如使用系统默认值),而AGP 8.2会直接抛出异常,明确提示属性未找到。
- 主题继承检查强化:如果Activity主题未正确继承
Theme.MaterialComponents.*或Theme.AppCompat.*这类标准主题,Hedgehog版本会更严格地校验属性存在性,而旧版本可能忽略该问题。 - 资源编译优化:Hedgehog的资源编译流程做了优化,对未定义属性的引用会在运行时更早触发错误,而非被系统兼容处理。
解决方案
- 修正主题继承:确保Activity使用的主题继承自标准AppCompat或Material Components主题,比如:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- 其他自定义属性 --> </style>
- 显式定义缺失属性:如果使用自定义主题,在主题中显式添加
colorOnBackground属性:
<style name="MyCustomTheme" parent="Theme.AppCompat.Light"> <item name="colorOnBackground">@color/your_desired_color</item> </style>
- 替换为具体颜色(不推荐):临时方案可将
?attr/colorOnBackground替换为具体颜色值,但会失去主题适配能力,不建议长期使用。
内容的提问来源于stack exchange,提问作者FunDeveloper
相关产品推荐
相关产品推荐

