MaterialComponents AlertDialog文本颜色

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

阅读 MaterialComponents主题提示对话框按钮https:/medium.com@lcdsmaomaterial-design-custom-alert-dialog-5a9cab3ade11。 我设置 AlertDialog 新材料主题的按钮和文字颜色。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <!-- AlertDialog -->
    <item name="materialAlertDialogBodyTextStyle">@style/MaterialAlertDialogTextTheme</item>
    <item name="materialAlertDialogTheme">@style/MaterialAlertDialogButtonsTheme</item>
</style>

<!-- AlertDialog text -->
<style name="MaterialAlertDialogTextTheme" parent="MaterialAlertDialog.MaterialComponents.Body.Text">
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:colorAccent">@color/colorPrimary</item>
    <item name="colorAccent">@color/colorPrimaryitem>
    <item name="android:textSize">14sp</item>
    <item name="android:textStyle">bold</item>
</style>

<!-- AlertDialog buttons -->
<style name="MaterialAlertDialogButtonsTheme" parent="ThemeOverlay.MaterialComponents.MaterialAlertDialog">
    <item name="buttonBarPositiveButtonStyle">@style/AlertDialog.Button</item>
    ...

在创建一个 AlertDialogFragment 使用

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    super.onCreateDialog(savedInstanceState)

    return MaterialAlertDialogBuilder(context!!).apply {
        ...
    }.create()
}

我得到

enter image description here

正如你所看到的,按钮的颜色已经改变,但你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是,你可以看到的是。文字颜色和风格没有改变.

然后我试了一下 https:/stackoverflow.coma519362362914140。:

<style name="AlertDialog" parent="Base.Theme.AppCompat.Light.Dialog">
    <item name="android:textColorPrimary">#005B82</item>
    <item name="colorAccent">#1b5e20</item>
</style>

...
    return MaterialAlertDialogBuilder(context!!, R.style.AlertDialog).apply {

并得到了

enter image description here

如何做到不加 AlertDialog 主题,只是重新定义了Material主题?

android material-design android-alertdialog
1个回答
1
投票

在Material Components中,你可以使用这样的风格。

<!-- Alert Dialog -->
  <style name="MyThemeOverlay.MaterialAlertDialog" 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>

     <!-- Buttons -->
     <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
     <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
     <item name="buttonBarNeutralButtonStyle">....</item>
  </style>


  <style name="PositiveButtonStyle" parent="@style/Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">#FFFFFF</item>
    <item name="backgroundTint">#00f</item>
  </style>

  <style name="NegativeButtonStyle" parent="@style/Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">@color/primaryDarkColor</item>
  </style>

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

  <style name="BodyTextAppearance.MaterialComponents.Body2" parent="@style/TextAppearance.MaterialComponents.Body2">
    <item name="android:textColor">@color/colorAccent</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

然后你可以在构造函数中引用这个样式,比如:

    new MaterialAlertDialogBuilder(context,
        R.style.MyThemeOverlay.MaterialAlertDialog)

或者你可以在你的应用主题中把它设置为默认的。

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

     <item name="materialAlertDialogTheme">@style/MyThemeOverlay.MaterialAlertDialog
    </item>

</style>
© www.soinside.com 2019 - 2024. All rights reserved.