Как отобразить MaterialAlertDialog? - PullRequest
0 голосов
/ 27 февраля 2020

Я меняю тему моего приложения с AppCompat на MaterialComponents, и все, кроме диалоговых окон с предупреждениями, работает. Я уже установил тему приложения на MaterialComponents как в стилях, так и в манифесте.

стилей

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/grey</item>
    <item name="colorPrimaryDark">@color/black</item>
    <item name="colorAccent">@color/red</item>
    <item name="colorSurface">@color/white</item>
    <item name="colorOnSecondary">@color/white</item>
    <item name="colorSecondary">@color/red</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.MaterialComponents.Dark.ActionBar"/>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.MaterialComponents.Light"/>

build.gradle

implementation 'com.google.android.material:material:1.1.0'

AndroidManifest

<application
    android:allowBackup="true"
    android:fullBackupContent="false"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:ignore="GoogleAppIndexingWarning">

Это код, с которым я пытаюсь отобразить мой диалог:

MaterialAlertDialogBuilder(context)
            .setTitle(R.string.tip_title)
            .setMessage(R.string.tip)
            .setNeutralButton(R.string.ok, null)
            .setPositiveButton(R.string.do_not_show_again) { _, _ ->
                preferencesHelper.disableTip()
            }.show()

И наконец, я получаю сообщение об ошибке:

java .lang.IllegalArgumentException: стиль для этого компонента требует, чтобы тема вашего приложения была Theme.AppCompat (или потомок).

Как я могу исправить эту ошибку?

1 Ответ

0 голосов
/ 28 февраля 2020

Функция, которая отображала диалог, принимала Context в качестве входного параметра, который, в свою очередь, был контекстом приложения, внедренным в класс, где находится функция.

Мне удалось исправить проблему, изменив тип входного параметра в функции Activity, что является способом применения правильной темы.

...