Вы можете использовать MaterialAlertDialogBuilder
, включенные в библиотеку Компоненты материала .
. Используйте метод .setView(R.layout.dialog_layout)
, чтобы надуть ваш пользовательский макет.
Что-то вроде:
new MaterialAlertDialogBuilder(MainActivity.this,
R.style.MyThemeOverlay_MaterialComponents_MaterialAlertDialog)
.setTitle("Dialog")
.setView(R.layout.dialog_layout)
.setPositiveButton("Ok", null)
.setNegativeButton("Skip", null)
.show();
Затем используйте shapeAppearanceOverlay
, чтобы определить свою форму и применить закругленные углы (требуется v.1.1.0).
<!-- Alert Dialog -->
<style name="MyThemeOverlay.MaterialComponents.MaterialAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.Dialog.Rounded</item>
<item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
...
</style>
<style name="PositiveButtonStyle" parent="@style/Widget.MaterialComponents.Button.TextButton.Dialog">
<item name="android:textColor">#FFFFFF</item>
<item name="backgroundTint">#00f</item>
</style>
<!-- Rounded corners -->
<style name="ShapeAppearanceOverlay.MyApp.Dialog.Rounded" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">16dp</item>
</style>
![enter image description here](https://i.stack.imgur.com/J05WZ.png)
Также вы можете использовать атрибут materialThemeOverlay
для переопределения стиля / цвета по умолчаниюопределено в теме вашего приложения, не меняя его для всех компонентов.
Что-то вроде:
<style name="MyThemeOverlay.MaterialComponents.MaterialAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="materialThemeOverlay">@style/MyAlThemeOverlay</item>
...
</style>
<style name="MyAlThemeOverlay" parent="ThemeOverlay.MaterialComponents.TextInputEditText.FilledBox">
<item name="colorPrimary">@color/....</item>
</style>
Также библиотека Material Components поддерживает тему DayNight .
Тема вашего приложения просто наследуется от Theme.MaterialComponents.DayNight
.
Что-то вроде:
<style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight">
<!-- ... -->
</style>
или:
res/values/themes.xml
:
<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light">
<!-- ... -->
</style>
res/values-night/themes.xml
:
<style name="Theme.MyApp" parent="Theme.MaterialComponents">
<!-- ... -->
</style>
Без изменения кода AlertDialog
наследуется от темы приложения.