如何正确更改MaterialAlertDialog文本颜色?

时间:2019-07-05 14:50:12

标签: android material-components material-components-android

我尝试仅使用Material Components中的小部件,但是在许多情况下,没有记录如何实现样式。

让我们考虑MaterialAlertDialog

每次我想显示一个对话框时,我都会调用这段代码:

MaterialAlertDialogBuilder(context, R.style.Theme_MyApp_Dialog_Alert)
    .setTitle("Title")
    .setMessage("This is message.")
    .setPositiveButton(R.string.ok) { _, _ -> }
    .show()

如您所见,我正在使用自定义主题。

<style name="Theme.MyApp.Dialog.Alert" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
    <!-- attributes here -->
</style>

问题是某些属性不起作用。例如textColor。因此问题是如何更改MaterialAlertDialog中的正文或标题文本颜色?

我使用的是材料组件的最新版本-1.1.0-alpha07

PS。

我不确定哪个主题应该是父主题。在Material Theme Builder中,他们使用的@style/ThemeOverlay.MaterialComponents.Dialog.Alert实际上使对话框看起来“很旧”。

2 个答案:

答案 0 :(得分:3)

您可以使用以下方法简单地覆盖默认颜色:

  <style name="Theme.MyApp.Dialog.Alert" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">

     <!-- Text Color for title and message -->
     <item name="colorOnSurface">@color/....</item>
     ....
  </style> 

enter image description here

否则,您可以使用以下方法自定义标题和正文所使用的样式:

  <style name="Theme.MyApp.Dialog.Alert" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">    
      <!-- Title -->
      <item name="materialAlertDialogTitleTextStyle">@style/MyTitle_MaterialAlertDialog.MaterialComponents.Title.Text</item>

     <!-- Body -->
     <item name="materialAlertDialogBodyTextStyle">@style/BodyTextAppearance.MaterialComponents.Body2</item>
  </style>

  <style name="MyTitle_MaterialAlertDialog.MaterialComponents.Title.Text" parent="@style/MaterialAlertDialog.MaterialComponents.Title.Text">
    <item name="android:textColor">@color/...</item>
    <item name="android:textAppearance">@style/....</item>
  </style>

  <style name="BodyTextAppearance.MaterialComponents.Body2" parent="@style/MaterialAlertDialog.MaterialComponents.Body.Text">
    <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">sans-serif-condensed-light</item>
  </style>

enter image description here

答案 1 :(得分:1)

按如下所示更改样式

<style name="Theme.MyApp.Dialog.Alert" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
    <item name="materialAlertDialogTitleTextStyle">@style/MaterialAlertDialogText</item>
</style>

创建MaterialAlertDialogText样式并设置textColor

<style name="MaterialAlertDialogText" parent="@style/MaterialAlertDialog.MaterialComponents.Title.Text">
    <item name="android:textColor">@color/yourTextColor</item>
</style>