如何使用样式全局更改AlertDialog上的按钮文本颜色?

问题描述 投票:2回答:3

在Android O上,当我这样做时:

  <style name="MyTheme" parent="@android:style/Theme.Material.Light.NoActionBar"> 

    <item name="android:textColor">#ff0000</item>

  </style>

我的alertdialog的文本按钮颜色已更改,但这在棒棒糖下不起作用。更糟糕的是,棒棒糖会更改Alertdialog标题的颜色。

如何从kitkat到android O,我可以全局更改所有Alertdialog按钮的字体颜色?

android android-alertdialog android-theme android-styles material-components-android
3个回答
1
投票
使用MaterialComponents主题和MaterialAlertDialogBuilder,您可以使用应用程序主题中的

materialAlertDialogTheme属性来全局定义样式。

类似:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight"> <item name="materialAlertDialogTheme">@style/My_MaterialAlertDialog</item> </style>

然后您可以定义自定义样式:

<style name="My_MaterialAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog"> <!-- Style for positive button --> <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item> <!-- Style for negative button --> <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item> <!-- Style for neutral button --> <item name="buttonBarNeutralButtonStyle">@style/NeutralButtonStyle</item> </style>

按钮样式定义为:

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

使用库的版本[[1.1.0
],您还可以使用自定义样式中的

materialThemeOverlay来简单地覆盖默认颜色:

<style name="My_MaterialAlertDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog"> <item name="materialThemeOverlay">@style/DialogButtonOverlay</item> </style> <style name="DialogButtonOverlay"> <item name="colorPrimary">@color/...</item> </style>

1
投票
<style name="AppAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item> <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item> </style> <style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/colorPrimaryText</item> <item name="android:backgroundTint">@android:color/transparent</item> </style> <style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/colorPrimaryText</item> <item name="android:backgroundTint">@android:color/transparent</item> </style> <style name="AppTheme" parent="Theme.MaterialComponents.Light"> ... <item name="alertDialogTheme">@style/AppAlertDialog</item> </style>

0
投票
public class Dialog { private static final int resId = R.layout.dialog_dialog; private AlertDialog alertDialog; /** * Custom Dialog * * @param context * @param titleText * @param message * @param positiveText * @param negativeText * @param type * @param dialogListener */ public Dialog(final Context context, String titleText, String message, String positiveText, String negativeText, Type type, final DialogListener dialogListener) { TextView labelTitle, labelMessage, buttonPositive, buttonNegative; View view = LayoutInflater.from(context).inflate(resId, null, false); labelTitle = view.findViewById(R.id.labelTitle); labelMessage = view.findViewById(R.id.labelMessage); buttonPositive = view.findViewById(R.id.buttonPositive); buttonNegative = view.findViewById(R.id.buttonNegative); if (Utils.isNotEmpty(titleText)) labelTitle.setText(titleText); //(HMI2Utils.isNotEmpty is a null check if (Utils.isNotEmpty(message)) labelMessage.setText(message); if (Utils.isNotEmpty(positiveText)) buttonPositive.setText(positiveText); if (Utils.isNotEmpty(negativeText)) buttonNegative.setText(negativeText); switch (type) { case DANGEROUS: labelTitle.setTextColor(ContextCompat.getColor(context, R.color.white)); } buttonNegative.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); dialogListener.onNegativeButtonClick(); } }); buttonPositive.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { alertDialog.dismiss(); dialogListener.onPositiveButtonClick(); } }); Utils.hideSoftKeyboard((Activity) context); ContextThemeWrapper ctw = new ContextThemeWrapper(context, R.style.MyDialogTheme); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctw); alertDialogBuilder.setCancelable(false); alertDialogBuilder.setView(view); alertDialog = alertDialogBuilder.create(); Window window = alertDialog.getWindow(); if (window != null) { window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.setStatusBarColor(ContextCompat.getColor(context, R.color.app_theme_color)); } alertDialog.show(); }

和用于xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rlRoot"
    android:layout_width="736.15px"
    android:layout_height="532.66px"
    tools:ignore="Overdraw">

    <View
        android:id="@+id/focus_eater_dummy"
        android:layout_width="1px"
        android:layout_height="1px"
        android:focusable="true" />

    <ImageView
        android:layout_width="736.15px"
        android:layout_height="532.66px"
        android:scaleType="fitXY"
        android:src="your drawable" />

    <RelativeLayout
        android:id="@+id/container"
        android:layout_width="736.15px"
        android:layout_height="wrap_content"
        android:orientation="vertical"
    >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="67.83px"
            android:layout_marginRight="67.83px"
            android:layout_marginTop="57.855px"
            android:orientation="vertical">

            <TextView
                android:id="@+id/labelTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:ellipsize="end"
                android:gravity="center_horizontal"
                android:maxLines="1"
                android:text="@string/delete_message_string"
                android:textColor="@color/white"
                android:textSize="24sp" />

            <TextView
                android:id="@+id/labelMessage"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="18px"
                android:lineSpacingExtra="18px"
                android:gravity="center_horizontal"
                android:lineSpacingMultiplier="1"
                android:text="@string/delete_message_string"
                android:textColor="@color/white"

                android:textSize="24sp" />
        </LinearLayout>


    </RelativeLayout>

    <LinearLayout
        android:id="@+id/containerButtons"
        android:layout_width="736.15px"
        android:layout_height="532.66px"
        android:weightSum="2"
        android:gravity="bottom"
        android:layout_gravity="bottom"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/buttonPositive"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="@dimen/margin_button_vertical_dai"

            android:background="@drawable/popup_button_selector"
            android:gravity="center"
            android:textColor="@color/white"
            android:textSize="32sp"
            tools:text="OK" />

        <TextView
            android:id="@+id/buttonNegative"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="100dp"
            android:background="@drawable/popup_button_selector"
            android:gravity="center"
            android:text="Cancel"
            android:textColor="@color/white"
            android:textSize="32sp" />
         </LinearLayout>
         </FrameLayout>

进行自定义更改,然后像调用对话框一样

                   new Dialog(context,
                    "Title 1",
                    "Message 2",
                    "OK",
                    "Cancel",
                    Dialog.Type.DANGEROUS,
                    new Dialog.DialogListener() {
                        @Override
                        public void onPositiveButtonClick() {
                            //implement Click here
                        }

                        @Override
                        public void onNegativeButtonClick() {
                                 //implement Click here
                        }
                    }
            );
            dialog.dismiss();
© www.soinside.com 2019 - 2024. All rights reserved.