无法更改AlertDialog按钮的背景颜色

时间:2019-08-28 07:37:42

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

我正在尝试使用在stackoverflow中为此问题定义的所有解决方案来更改AlertDialog的颜色,但仍然无法正常工作。

这是我用来实现这一目标的代码:

 val vacationDialog = AlertDialog.Builder(fragment.context,R.style.DialogTheme)
 val factory = LayoutInflater.from(OtrosDetailFragment.fragment.context);
 var view = factory.inflate(R.layout.sample, null)
 [...]
 vacationDialog.setView(view)
        val window = vacationDialog.create()
 vacationDialog.setPositiveButton("Cerrar"){dialog, which ->
            dialog.dismiss()

        }

 /**Listener called when the AlertDialog is shown**/


 vacationDialog.show()

 window.setOnShowListener {

 /**Get the positive button from the AlertDialog**/
 val positiveButton = window.getButton(DialogInterface.BUTTON_POSITIVE)

 /**Set your color to the positive button**/
 positiveButton.setBackgroundColor(ContextCompat.getColor(fragment.context!!, R.color.colorPrimary))
 positiveButton.setTextColor(ContextCompat.getColor(fragment.context!!, R.color.colorPrimary))
 positiveButton.setHintTextColor(ContextCompat.getColor(fragment.context!!, R.color.colorPrimary))
 positiveButton.setLinkTextColor(ContextCompat.getColor(fragment.context!!, R.color.colorPrimary))
        }

这是在styles.xml中定义的DialogTheme样式,顺便说一句,在其中,我找不到更改默认按钮颜色(黑色)的方法,并且似乎覆盖了代码中尝试的任何更改。

<style name="DialogTheme" parent="android:Theme.Holo">

        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <!-- No backgrounds, titles or window float -->
        <item name="android:windowBackground">@color/white</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:gravity">center</item>


    </style>

关于如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:1)

如果使用custom layout,则可以轻松更改任何内容。请遵循以下代码:

private fun showAlertDialog(activity: Activity){
    val dialog = Dialog(activity)
    dialog.setContentView(R.layout.dialog_layout)
    dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
    dialog.show()
}

答案 1 :(得分:1)

如果您使用的是 AppCompat 主题,则可以使用以下内容:

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <!-- Used for the buttons -->
        <item name="colorAccent">#FFCC00</item>
        <!-- Used for the title and text -->
        <item name="android:textColorPrimary">#FFFFFF</item>
        <!-- Used for the background -->
        <item name="android:background">#5fa3d0</item>
</style>

enter image description here

使用新的Material components for android library,您可以使用新的androidx.appcompat.app.AlertDialog

只需使用以下内容:

new MaterialAlertDialogBuilder(context)
            .setTitle("Dialog")
            .setMessage("Lorem ipsum dolor ....")
            .setPositiveButton("Ok", /* listener = */ null)
            .setNegativeButton("Cancel", /* listener = */ null)
            .show();

您可以使用以下方式自定义主题:

  <!-- Alert Dialog -->
  <style name="MyThemeOverlay.MaterialComponents.MaterialAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
    <item name="buttonBarNegativeButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Dialog</item>
  </style>

和:

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

enter image description here

答案 2 :(得分:1)

  • 您可以为AlertDialog创建自定义布局,并在扩展AlertDialog的自定义类中对其进行充气。
  • 使用androidx.appcompat.app.AlertDialog而不是常规的android.app.AlertDialog