我决定在android上尝试重大警报dialogs。 我遇到的问题是尝试应用某些样式时。检查文档,我发现了这一点:
<item name="materialAlertDialogTheme">@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog</item>
所以我决定尝试一下:
<style name="BaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="materialAlertDialogTheme">@style/Theme.App.MaterialDialogAlert</item>
</style>
<style name="Theme.App.MaterialDialogAlert" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
<!-- FIXME: this does not work. it does not change the title appearance. -->
<!-- <item name="materialAlertDialogTitleTextStyle">@style/TextAppearance.App.MaterialDialogAlert.Title.Text</item>-->
<!-- FIXME: this change only the title font, not the message appearance -->
<item name="android:fontFamily">@font/nunito_semi_bold</item>
<item name="buttonBarPositiveButtonStyle">@style/Widget.App.Button.TextButton</item>
<item name="buttonBarNegativeButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<style name="TextAppearance.App.MaterialDialogAlert.Title.Text" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:fontFamily">@font/nunito_semi_bold</item>
</style>
但是到目前为止,我可以成功设置按钮的样式。关于标题和消息,我有一些问题。现在,我可以通过以下方式将某些样式应用于标题:
<item name="android:fontFamily">@font/nunito_semi_bold</item>
但是我认为这不是正确的方法。首先,这不会将字体应用于消息部分。其次,我想应用其他文本样式,一种用于标题,一种用于消息部分。
我也尝试检查以下样式:MaterialAlertDialog.MaterialComponents.Title.Text
,可以在某处看到该项目的应用:
<item name="android:textAppearance">?attr/textAppearanceSubtitle1</item>
所以我决定在基本主题中声明这一点:
<style name="BaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="textAppearanceSubtitle1">@style/TextAppearance.App.Subtitle1</item>
</style>
<style name="TextAppearance.App.Subtitle1" parent="TextAppearance.MaterialComponents.Subtitle1">
<item name="android:fontFamily">@font/nunito_semi_bold</item>
</style>
但没有任何改变。
所以我的问题是:
编辑 我也尝试过使用它:
<style name="Theme.App.MaterialDialogAlert" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
<item name="materialAlertDialogTitleTextStyle">@style/Dialog.App.MaterialDialogAlert.Title.Text</item>
<item name="materialAlertDialogBodyTextStyle">@style/TextAppearance.App.MaterialDialogAlert.Body.Text</item>
<item name="buttonBarPositiveButtonStyle">@style/Widget.App.Button.TextButton</item>
<item name="buttonBarNegativeButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<style name="Dialog.App.MaterialDialogAlert.Title.Text" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textAppearance">@style/TextAppearance.App.Subtitle1</item>
</style>
<style name="TextAppearance.App.Subtitle1" parent="TextAppearance.MaterialComponents.Subtitle1">
<item name="fontFamily">@font/nunito_semi_bold</item>
<item name="android:fontFamily">@font/nunito_semi_bold</item>
</style>
但是它不起作用。
我也从材料成分repo中进行了尝试:
<style name="Theme.App.MaterialDialogAlert" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
<item name="materialAlertDialogTitleTextStyle">@style/Dialog.App.MaterialDialogAlert.Title.Text</item>
<item name="materialAlertDialogBodyTextStyle">@style/Dialog.App.MaterialDialogAlert.Body.Text</item>
<item name="buttonBarButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<style name="Dialog.App.MaterialDialogAlert.Title.Text" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textAppearance">@style/TextAppearance.App.Subtitle1</item>
</style>
<style name="Dialog.App.MaterialDialogAlert.Body.Text" parent="@style/MaterialAlertDialog.MaterialComponents.Body.Text">
<item name="android:textAppearance">@style/TextAppearance.Body2</item>
<item name="fontFamily">@font/nunito_regular</item>
<item name="android:fontFamily">@font/nunito_regular</item>
<item name="android:textColor">@color/color_error</item>
</style>
但不起作用。
我唯一可以自定义的想法就是将标题添加到主题中:
<item name="android:windowTitleStyle">@style/Dialog.App.MaterialDialogAlert.Title.Text</item>
我正在检查库中的代码,并且可以看到正在使用此布局:mtrl_alert_dialog.xml
在这里我可以看到:
<TextView
android:id="@android:id/message"
style="?attr/materialAlertDialogBodyTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="?attr/dialogPreferredPadding"
android:paddingRight="?attr/dialogPreferredPadding"/>
在这里我们可以看到对materialAlertDialogBodyTextStyle的引用。也许这是库中的错误?
答案 0 :(得分:1)
首先应用此样式:
<style name="MaterialAlertDialogRoundedStyle" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
<item name="shapeAppearanceOverlay">
@style/ShapeAppearanceOverlay.MaterialAlertDialog.Rounded
</item>// For rounded dialog
<item name="materialAlertDialogTitleTextStyle">
@style/TitleMaterialAlertDialog.MaterialComponents.Title.Text
</item>//to change title text properties of dialog
<item name="materialAlertDialogBodyTextStyle">
@style/BodyMaterialAlertDialog.MaterialComponents.Body.Text
</item>//to change body text properties of dialog
</style>
<style name="ShapeAppearanceOverlay.MaterialAlertDialog.Rounded" parent="">
<item name="cornerSize">@dimen/_10sdp</item>
</style>
<style name="TitleMaterialAlertDialog.MaterialComponents.Title.Text" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textColor">@color/black</item>
<item name="android:textSize">@dimen/_14ssp</item>
<item name="android:fontFamily">@font/montserrat_semi_bold</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
<style name="BodyMaterialAlertDialog.MaterialComponents.Body.Text" parent="MaterialAlertDialog.MaterialComponents.Body.Text">
<item name="android:textColor">@color/black</item>
<item name="android:textSize">@dimen/_12ssp</item>
<item name="android:textAppearance">@style/MyTitle_TextAppearance.MaterialComponents.Subtitle1</item>
</style>
<style name="MyTitle_TextAppearance.MaterialComponents.Subtitle1" parent="TextAppearance.MaterialComponents.Subtitle1">
<item name="fontFamily">@font/montserrat_regular</item>
<item name="android:fontFamily">@font/montserrat_regular</item>
</style>
通过此代码打开对话框:
MaterialAlertDialogBuilder(
context,
R.style.MaterialAlertDialogRoundedStyle
)
.setTitle(getText(R.string.app_name))
.setMessage(getString(R.string.are_you_sure_you_want_to_logout))
.setCancelable(false)
.setPositiveButton(getText(R.string.ok)) { dialog, _ ->
dialog.dismiss()
}
.setNegativeButton(getText(R.string.cancel)) { dialog, _ ->
dialog.dismiss()
}
.show()
答案 1 :(得分:0)
您可以使用此样式来自定义标题和正文:
<style name="Theme.App.MaterialDialogAlert" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
<!-- Title -->
<item name="materialAlertDialogTitleTextStyle">@style/MyTitle_MaterialAlertDialog</item>
<!-- Body -->
<item name="materialAlertDialogBodyTextStyle">@style/BodyMaterialAlertDialog.MaterialComponents.Body.Text</item>
</style>
然后定义标题的样式:
<style name="MyTitle_MaterialAlertDialog" parent="@style/MaterialAlertDialog.MaterialComponents.Title.Text">
<item name="android:textAppearance">@style/MyTitle_TextAppearance.MaterialComponents.Subtitle1</item>
</style>
<style name="MyTitle_TextAppearance.MaterialComponents.Subtitle1" parent="TextAppearance.MaterialComponents.Subtitle1">
<item name="fontFamily">.....</item>
<item name="android:fontFamily">....</item>
<item name="android:textStyle">.....</item>
</style>
然后为正文定义:
<style name="BodyTextAppearance.MaterialComponents.Body2" parent="@style/TextAppearance.MaterialComponents.Body2">
<item name="android:textColor">@color/....</item>
<item name="android:textSize">20sp</item>
<item name="android:textStyle">bold</item>
<item name="android:textAllCaps">true</item>
<item name="fontFamily">.....</item>
<item name="android:fontFamily">....</item>
</style>