【问题标题】:How to change MaterialAlertDialog text color properly?如何正确更改 MaterialAlertDialog 文本颜色?
【发布时间】:2019-07-05 14:50:12
【问题描述】:

我尝试仅使用 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中的body或者title文字颜色?

我使用最新版本的 Material Components - 1.1.0-alpha07

PS。

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

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

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

        <style name="Theme.MyApp.Dialog.Alert" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
      
           <!-- Text Color for title and message -->
           <item name="colorOnSurface">@color/....</item>
           ....
        </style> 
      

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

        <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>
      

      【讨论】:

        猜你喜欢
        • 2020-05-31
        • 2021-06-30
        • 1970-01-01
        • 2011-06-11
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 2016-09-06
        相关资源
        最近更新 更多