Last active
January 26, 2023 05:29
-
-
Save victory316/b10329e1f2113d823d32b3fc4eb850b5 to your computer and use it in GitHub Desktop.
MaterialAlertDialog wrapper Extension function
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun Context.buildAlertDialog( | |
@StringRes title: Int? = null, | |
@StringRes message: Int? = null, | |
@StringRes setPositiveButton: Int? = null, | |
@StringRes setNegativeButton: Int? = null, | |
onPositiveSelected: (() -> Unit)? = null, | |
onNegativeSelected: (() -> Unit)? = null | |
): MaterialAlertDialogBuilder { | |
return MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) | |
.apply { | |
title?.let { setTitle(title) } | |
message?.let { setMessage(message) } | |
setPositiveButton?.let { | |
setPositiveButton(setPositiveButton) { _, _ -> | |
onPositiveSelected?.invoke() | |
} | |
} | |
setNegativeButton?.let { | |
setNegativeButton(setNegativeButton) { _, _ -> | |
onNegativeSelected?.invoke() | |
} | |
} | |
} | |
} | |
fun Context.buildAlertWithMenuDialog( | |
@ArrayRes itemsId: Int, | |
onItemSelected: (selectedItemId: Int) -> Unit | |
): MaterialAlertDialogBuilder { | |
return MaterialAlertDialogBuilder(this, R.style.MaterialAlertDialogTheme) | |
.apply { | |
setItems(itemsId) { _, selected -> | |
onItemSelected.invoke(selected) | |
} | |
} | |
} | |
// Usage example in Activity or Fragment | |
private fun showExitAlert() { | |
buildAlertDialog( | |
title = R.string.title_exit, | |
message = R.string.message_exit, | |
setPositiveButton = R.string.confirm_exit, | |
onPositiveSelected = { | |
finishAffinity() | |
} | |
).show() | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<style name="MaterialAlertDialogTheme" parent="MaterialAlertDialog.Material3"> | |
<item name="android:textSize">14dp</item> | |
<item name="materialAlertDialogTitleTextStyle">@style/MaterialAlertDialogTitleStyle</item> | |
<item name="materialAlertDialogBodyTextStyle">@style/MaterialAlertDialogItemStyle</item> | |
<item name="buttonBarPositiveButtonStyle">@style/MaterialAlertDialogButtonStyle</item> | |
<item name="buttonBarNegativeButtonStyle">@style/MaterialAlertDialogButtonStyle</item> | |
</style> | |
<style name="MaterialAlertDialogTitleStyle" parent="MaterialAlertDialog.MaterialComponents.Title.Text"> | |
<item name="android:textSize">24dp</item> | |
<item name="enforceMaterialTheme">true</item> | |
<item name="enforceTextAppearance">true</item> | |
<item name="android:textAppearance">?attr/textAppearanceHeadlineSmall</item> | |
<item name="android:textColor">@color/black</item> | |
</style> | |
<style name="MaterialAlertDialogItemStyle" parent="MaterialAlertDialog.Material3.Body.Text"> | |
<item name="android:textColor">@color/black</item> | |
</style> | |
<style name="MaterialAlertDialogButtonStyle" parent="Widget.Material3.Button.TextButton.Dialog"> | |
<item name="android:textSize">14dp</item> | |
<item name="enforceMaterialTheme">true</item> | |
<item name="enforceTextAppearance">true</item> | |
<item name="android:textAppearance">?attr/textAppearanceButton</item> | |
<item name="android:textColor">@color/colorAccent</item> | |
</style> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment