我有很多警报对话框在我的应用程序。这是一个默认的布局,但我添加了积极和消极的按钮对话框。所以按钮得到Android 5的默认文本颜色(绿色)。我试图改变它,但没有成功。知道怎么改变文字的颜色吗?

自定义对话框:

public class MyCustomDialog extends AlertDialog.Builder {

    public MyCustomDialog(Context context,String title,String message) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View viewDialog = inflater.inflate(R.layout.dialog_simple, null, false);

        TextView titleTextView = (TextView)viewDialog.findViewById(R.id.title);
        titleTextView.setText(title);
        TextView messageTextView = (TextView)viewDialog.findViewById(R.id.message);
        messageTextView.setText(message);

        this.setCancelable(false);

        this.setView(viewDialog);

    } }

创建对话框:

MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            ...
                        }
}).show();

那个negativeButton是一个默认的对话框按钮,并采用Android 5 Lollipop的默认绿色。

非常感谢


当前回答

快速简单的方法: 更改res/values/colors.xml中的colorAccent颜色,颜色以十六进制表示,例如#010613为黑色。 拜拜

其他回答

按钮和其他文本的颜色也可以通过主题来改变:

values-21 / styles.xml

<style name="AppTheme" parent="...">
  ...
  <item name="android:timePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="android:datePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="android:alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert">
  <item name="android:colorPrimary">#00397F</item>
  <item name="android:colorAccent">#0AAEEF</item>
</style>

结果:

<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:colorPrimary">#00397F</item>
    <item name="android:textColorPrimary">#22397F</item>
    <item name="android:colorAccent">#00397F</item>
    <item name="colorPrimaryDark">#22397F</item>
</style>

按钮和其他文本的颜色也可以使用appcompat更改:

快速简单的方法: 更改res/values/colors.xml中的colorAccent颜色,颜色以十六进制表示,例如#010613为黑色。 拜拜

以下是@trungdinhtrong接受的答案的Kotlin版本:

val alert = builder.create()
if (button1Text == "Delete") {
    alert.setOnShowListener { dialog ->
        alert.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(Color.RED);
    }
}

BTW, it seems like Android's idea of "positive" and "negative" buttons isn't compatible with the idea of "safe" and "destructive" buttons. In a dialog with Cancel and Delete buttons, I think Android would consider Delete the positive button because it performs an action, but I would consider it a destructive button because it leads to data loss. So instead of using the styles file to set positive and negative button colors, I'm using this code to make the Delete button red even though it's the "positive" button.

使用styles.xml (value)

非常简单的解决方案,改变colorPrimary作为您的选择,它将改变按钮文本的警告框的颜色。

<style name="MyAlertDialogStyle" parent="android:Theme.Material.Dialog.Alert">


        <!-- Used for the buttons -->
        <item name="colorAccent">@android:color/white</item>
        <!-- Used for the title and text -->
        <item name="android:textColorPrimary">@color/black</item>

        <!-- Used for the background -->
        <item name="android:background">#ffffff</item>
        <item name="android:colorPrimary">@color/white</item>
        <item name="android:colorAccent">@color/white</item>
        <item name="android:windowEnterAnimation">@anim/bottom_left_enter</item>
    </style>

替代方案(使用Java)

 @SuppressLint("ResourceAsColor")
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {

                AlertDialog dialog = new AlertDialog.Builder(view.getContext(), R.style.MyAlertDialogStyle)

                        .setTitle("Royal Frolics")
                        .setIcon(R.mipmap.ic_launcher)
                        .setMessage(message)
                        .setPositiveButton("OK", (dialog1, which) -> {
                            //do nothing
                            result.confirm();
                        }).create();

                Objects.requireNonNull(dialog.getWindow()).getAttributes().windowAnimations = R.style.MyAlertDialogStyle;
                dialog.show();
                
                dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(R.color.white);
                return true;

            }