将样式应用于Android中的警报对话框

问题描述 投票:0回答:1

我决定在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>

但没有任何改变。

所以我的问题是:

  1. 如何使用主题/样式正确执行此操作。
  2. 我当前的代码在做什么错?
android material-design android-alertdialog material-components material-components-android
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>

然后定义body

  <style name="BodyMaterialAlertDialog.MaterialComponents.Body.Text" parent="MaterialAlertDialog.MaterialComponents.Body.Text">
    <item name="android:textAppearance">@style/BodyTextAppearance</item>
  </style>

  <style name="BodyTextAppearance" parent="@style/TextAppearance.MaterialComponents.Body2">
    <item name="fontFamily">.....</item>
    <item name="android:fontFamily">....</item>
    <item name="android:textStyle">.....</item>
    <item name="android:textSize">....</item>
  </style>

enter image description here enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.