Диалоговое окно предупреждения о дизайне материалов
Я добавил материал для приложения 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();