Android11/MIUI12.5.9中material_dynamic_neutral10资源异常求助
Android 11/MIUI 12.5.9 下Material动态颜色资源引发的Activity填充失败问题
在Android 11/MIUI 12.5.9设备上,Activity填充失败,根源是XML中Button控件内的android:textColor="@color/material_dynamic_neutral10"代码行,触发UnsupportedOperationException: Can't convert to ComplexColor异常。项目依赖implementation 'com.google.android.material:material:1.9.0',该问题仅出现在Android 11/MIUI 12.5.9设备,Android13/Nothing Phone、Android12/MIUI等设备均正常。
XML引用引发的错误堆栈
Process: org.example.myapp, PID: 8656 java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.myapp/org.example.myapp.SettingsActivity}: android.view.InflateException: Binary XML file line #164 in org.example.myapp:layout/activity_settings: Binary XML file line #164 in org.example.myapp:layout/activity_settings: Error inflating class Button at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3521) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3693) 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:2135) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:236) at android.app.ActivityThread.main(ActivityThread.java:8059) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967) Caused by: android.view.InflateException: Binary XML file line #164 in org.example.myapp:layout/activity_settings: Binary XML file line #164 in org.example.myapp:layout/activity_settings: Error inflating class Button Caused by: android.view.InflateException: Binary XML file line #164 in org.example.myapp:layout/activity_settings: Error inflating class Button Caused by: java.lang.UnsupportedOperationException: Can't convert to ComplexColor: type=0x1 at android.content.res.ResourcesImpl.loadComplexColorForCookie(ResourcesImpl.java:1200) at android.content.res.ResourcesImpl.loadComplexColorFromName(ResourcesImpl.java:1055) at android.content.res.ResourcesImpl.loadColorStateList(ResourcesImpl.java:1137) at android.content.res.Resources.loadColorStateList(Resources.java:1156) at android.content.res.TypedArray.getColorStateList(TypedArray.java:602) at android.view.View.<init>(View.java:5914) at android.widget.TextView.<init>(TextView.java:996) at android.widget.Button.<init>(Button.java:166) at android.widget.Button.<init>(Button.java:141) 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:1063) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:999) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:963) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1125) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1086) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1128) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1086) at android.view.LayoutInflater.inflate(LayoutInflater.java:684) at android.view.LayoutInflater.inflate(LayoutInflater.java:536) at org.example.myapp.databinding.ActivitySettingsBinding.inflate(ActivitySettingsBinding.java:142) at org.example.myapp.databinding.ActivitySettingsBinding.inflate(ActivitySettingsBinding.java:136) at org.example.myapp.SettingsActivity$binding$2.invoke(SettingsActivity.kt:23) at org.example.myapp.SettingsActivity$binding$2.invoke(SettingsActivity.kt:23) at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74) at org.example.myapp.SettingsActivity.getBinding(SettingsActivity.kt:23) at org.example.myapp.SettingsActivity.onCreate(SettingsActivity.kt:28) at android.app.Activity.performCreate(Activity.java:8157) at android.app.Activity.performCreate(Activity.java:8129) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3494) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3693) 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:2135) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:236) at android.app.ActivityThread.main(ActivityThread.java:8059) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
代码获取资源的尝试及错误
尝试通过代码获取该资源,先定义资源ID:val resId = com.google.android.material.R.color.material_dynamic_neutral10,以下三种方式均抛出android.content.res.Resources$NotFoundException异常:
button.resources.getColor(resId, context.theme)androidx.appcompat.view.ContextThemeWrapper(context, context.theme).getColor(resId)ContextCompat.getColor(context, resId)
对应的错误堆栈:
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.example.myapp/org.example.myapp.SettingsActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f06021a at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3521) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3693) 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:2135) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:236) at android.app.ActivityThread.main(ActivityThread.java:8059) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967) Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f06021a at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:239) at android.content.res.MiuiResourcesImpl.getValue(MiuiResourcesImpl.java:96) at android.content.res.Resources.getColor(Resources.java:1076) at android.content.Context.getColor(Context.java:686) at androidx.core.content.ContextCompat$Api23Impl.getColor(ContextCompat.java:1034) at androidx.core.content.ContextCompat.getColor(ContextCompat.java:578) at org.example.myapp.ui.UKt.setColors(U.kt:60) at org.example.myapp.ui.UKt.setColors$default(U.kt:55) at org.example.myapp.SettingsActivity.onCreate(SettingsActivity.kt:78) at android.app.Activity.performCreate(Activity.java:8157) at android.app.Activity.performCreate(Activity.java:8129) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3494)
核心疑问
XML引用时提示ComplexColor转换错误,但实际推测是资源找不到。目前可以手动指定#191C1E解决,但希望找到更合理的方案。请问这四种尝试(XML引用+三种代码方式)存在哪些根本性问题?
内容的提问来源于stack exchange,提问作者multistackdeveloper
相关产品推荐
相关产品推荐

