Material Alert Dialog,此组件上的样式要求您的应用主题为 Theme.AppCompat

问题描述 投票:0回答:2

我正在尝试制作一个 MaterialAlertDialog 但无论如何我都会收到以下错误

 java.lang.IllegalArgumentException: The style on this component requires your app theme to be Theme.AppCompat (or a descendant).
        at com.google.android.material.internal.ThemeEnforcement.checkTheme(ThemeEnforcement.java:243)
        at com.google.android.material.internal.ThemeEnforcement.checkAppCompatTheme(ThemeEnforcement.java:213)
        at com.google.android.material.internal.ThemeEnforcement.checkCompatibleTheme(ThemeEnforcement.java:148)
        at com.google.android.material.internal.ThemeEnforcement.obtainStyledAttributes(ThemeEnforcement.java:76)
        at com.google.android.material.dialog.MaterialDialogs.getDialogBackgroundInsets(MaterialDialogs.java:60)
        at com.google.android.material.dialog.MaterialAlertDialogBuilder.<init>(MaterialAlertDialogBuilder.java:117)
        at com.google.android.material.dialog.MaterialAlertDialogBuilder.<init>(MaterialAlertDialogBuilder.java:103)
        at com.adamm.quem.MainActivity$1.onItemClick(MainActivity.java:118)

我使用自定义主题作为我的 MainActivity 主题,它是 MaterialComponents 的父主题

<style name="MainMaterialTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

将主题更改为 AppCompat 没有帮助,而且这样做也不正确 我正在按照 Material IO 的解释进行操作 https://material.io/develop/android/components/dialog/

我的代码:

AlertDialog.Builder builder = new MaterialAlertDialogBuilder(getApplicationContext())
                            .setTitle("Title")
                            .setMessage("Message")
                    builder.show();

如何解决这个问题?

android material-design android-alertdialog
2个回答
37
投票

您传入

getApplicationContext()
并且应用程序上下文没有您的主题。将您的活动作为上下文传递:

AlertDialog.Builder builder = new MaterialAlertDialogBuilder(MainActivity.this)
    .setTitle("Title")
    .setMessage("Message")
builder.show();

0
投票

Kotlin 解决方案:

val builder = MaterialAlertDialogBuilder(this@MainActivity)
            .setTitle("Title")
            .setMessage("Message")
© www.soinside.com 2019 - 2024. All rights reserved.