首页 > 解决方案 > Android:MaterialTheme中具有自定义样式的AlertDialog引发资源未找到异常

问题描述

我将Theme.MaterialComponents.Light.NoActionBar 我的风格主题作为主要的 Apptheme。

我的警报主题是

<style name="MyDialogTheme" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
        <item name="android:windowBackground">@drawable/alert_bg</item>
        <item name="android:textColor">@color/text</item>
    </style>

我像这样建立我的警报对话

AlertDialog.Builder builder = new AlertDialog.Builder(AllowanceActivity.this, R.style.MyDialogTheme);

当我在没有样式的情况下运行它时,它可以正常运行,但是如果我使用我尝试过的所有主题扩展警报的任何其他样式,它就会崩溃 ,Theme.AppCompat.Light.Dialog.Alert 但 我总是会收到错误消息。Theme.AppCompat.Dialog.AlertTheme.MaterialComponents.Dialog.Alert

android.content.res.Resources$NotFoundException: Resource ID #0x7f07005d
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2462)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5471)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:102)
     Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f07005d
        at android.content.res.Resources.getValue(Resources.java:1432)
        at android.content.res.Resources.getValue(Resources.java:1412)
        at androidx.appcompat.widget.ResourceManagerInternal.loadDrawableFromDelegates(ResourceManagerInternal.java:252)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:139)
        at androidx.appcompat.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:411)
        at androidx.appcompat.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:86)
        at androidx.appcompat.app.AppCompatDelegateImpl.attachToWindow(AppCompatDelegateImpl.java:637)
        at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:311)
        at androidx.appcompat.app.AppCompatDelegateImpl.<init>(AppCompatDelegateImpl.java:272)
        at androidx.appcompat.app.AppCompatDelegate.create(AppCompatDelegate.java:232)
        at androidx.appcompat.app.AppCompatDialog.getDelegate(AppCompatDialog.java:170)
        at androidx.appcompat.app.AppCompatDialog.<init>(AppCompatDialog.java:59)
        at androidx.appcompat.app.AlertDialog.<init>(AlertDialog.java:98)
        at androidx.appcompat.app.AlertDialog$Builder.create(AlertDialog.java:983)

有没有人有同样的问题或者我错过了什么

标签: androidmaterial-designandroid-alertdialogandroid-stylesmaterial-components-android

解决方案


使用MaterialAlertDialogBu ​​ilder配置实例化AlertDialog的材料规格和主题。

就像是:

new MaterialAlertDialogBuilder(context,
                 R.style.MyThemeOverlay_MaterialComponents_MaterialAlertDialog)
            .setTitle("Dialog")
            //...
            .show();

也使用这种父样式ThemeOverlay.MaterialComponents.MaterialAlertDialog


推荐阅读