Диалоговое окно предупреждения о дизайне материалов

Я добавил материал для приложения appCompat в свое приложение, и кажется, что в диалоговых окнах предупреждения не используются мои первичные, первичные или акцентные цвета.

Вот мой базовый стиль:

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
    <item name="android:textColorPrimary">@color/action_bar_gray</item>
</style>

Исходя из моего понимания, текст кнопки диалога также должен использовать эти цвета. Я ошибаюсь в своем понимании или есть что-то еще, что мне нужно сделать?


Решение:

Отмеченный ответ заставил меня на правильном пути.

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
    <item name="android:actionModeBackground">@color/apptheme_color_dark</item>
    <item name="android:textColorPrimary">@color/action_bar_gray</item>
    <item name="sdlDialogStyle">@style/DialogStyleLight</item>
    <item name="android:seekBarStyle">@style/SeekBarNavyTheme</item>
</style>

<style name="StyledDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
</style>

Ответ 1

ОБНОВЛЕНО авг 2019 г. с помощью компонентов Material для библиотеки Android:

С новыми компонентами материалов для библиотеки Android вы можете использовать новый класс com.google.android.material.dialog.MaterialAlertDialogBuilder, который расширяет существующий класс androidx.appcompat.AlertDialog.Builder и обеспечивает поддержку последние спецификации дизайна материалов.

Просто используйте что-то вроде этого:

new MaterialAlertDialogBuilder(context)
            .setTitle("Dialog")
            .setMessage("Lorem ipsum dolor ....")
            .setPositiveButton("Ok", /* listener = */ null)
            .setNegativeButton("Cancel", /* listener = */ null)
            .show();

Вы можете использовать в своей теме что-то вроде:

 <!-- Base application theme. -->
 <style name="AppTheme" parent="Theme.MaterialComponents.Light">
    ...
    <item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog</item>
 </style>

Вы также можете использовать конструктор:

new MaterialAlertDialogBuilder(context, R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog)

С БИБЛИОТЕКОЙ ПОДДЕРЖКИ:

С новым AppCompat v22.1 вы можете использовать новый android.support.v7.app.AlertDialog.

Просто используйте код, подобный следующему:

import android.support.v7.app.AlertDialog

AlertDialog.Builder builder =
       new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
builder.setTitle("Dialog");
builder.setMessage("Lorem ipsum dolor ....");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

И используйте такой стиль:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">#FFCC00</item>
        <item name="android:textColorPrimary">#FFFFFF</item>
        <item name="android:background">#5fa3d0</item>
    </style>

В противном случае вы можете определить в своей текущей теме:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- your style -->
    <item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>

а затем в вашем коде:

 import android.support.v7.app.AlertDialog

    AlertDialog.Builder builder =
           new AlertDialog.Builder(this);

Здесь AlertDialog на Kitkat: enter image description here

Ответ 2

при инициализации диалогового построителя, передайте второй параметр в качестве темы. Он автоматически покажет материальный дизайн с уровнем API 21.

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);

или,

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);

Ответ 3

AppCompat не делает этого для диалогов (по крайней мере, пока)

РЕДАКТИРОВАТЬ: это делает сейчас. убедитесь, что вы используете android.support.v7.app.AlertDialog

Ответ 4

Вы можете рассмотреть этот проект: https://github.com/fengdai/AlertDialogPro

Он может предоставить вам диалоговые окна с предупреждением о материалах, почти такими же, как и леденец. Совместимость с Android 2.1.

Ответ 5

Вы можете использовать

Библиотека материалов >

Библиотека материалов > сделана для приятных предупреждений диалогов, кнопок и других вещей, таких как закуски. В настоящее время он сильно развит.

>

Руководство, код, пример - https://github.com/navasmdc/MaterialDesignLibrary

Руководство по добавлению библиотеки в Android Studio 1.0 - Как импортировать библиотеку материалов в Android Studio?

.

Счастливое кодирование;)

Ответ 6

Попробуйте эту библиотеку:

https://github.com/avast/android-styled-dialogs

На основе DialogFragments вместо AlertDialogs (как и у @afollestad). Главное преимущество: Dialogs не увольняются после вращения, и обратные вызовы все еще работают.

Ответ 7

По какой-то причине андроид: textColor только, кажется, обновляет цвет заголовка. Вы можете изменить цвет текста сообщения, используя

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

AlertDialog dialog = builder.create();
                Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
                wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                dialog.setMessage(wordtoSpan);
                dialog.show();