更改 AlertDialog.Builder 中按钮的颜色

Change color of button in AlertDialog.Builder

给定函数为

private void showInputDialog() {
    final AlertDialog.Builder alert = new AlertDialog.Builder(getActivity());
    final EditText input = new EditText(getActivity());
    input.setSingleLine();
    FrameLayout container = new FrameLayout(getActivity());
    FrameLayout.LayoutParams params = new  FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    params.leftMargin= convertDpToPx(25);                                       //remember to scale correctly
    params.rightMargin= convertDpToPx(30);
    input.setLayoutParams(params);
    container.addView(input);
    alert.setTitle("Change City");
    alert.setMessage("Hey there, could not find the city you wanted. Please enter a new one:\n");
    alert.setView(container);
    alert.setPositiveButton("Go", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            changeCity(input.getText().toString());
        }
    });
    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    alert.show();
}

现在,当我在我的应用程序中获得此 AlertDialog.Builder 时,按钮颜色为绿色(默认为 Android 5),但 EditText 颜色为粉红色(R.color.coloraccent)。如何将按钮的颜色更改为粉红色?

如有任何帮助,我们将不胜感激

您需要向警报添加自定义视图 window。创建一个名为 "my_custom_alert_window" 的布局文件,然后执行以下操作:

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.my_custom_alert_window, null);
dialogBuilder.setView(dialogView);

Button btn = (Button) dialogView.findViewById(R.id.label_field);
btn.setBackgroundColor(....);
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();

然后你可以像上面那样改变按钮的背景颜色

像这样尝试

alertDialog.show(); 

仅在调用 .show() 之后。 试试这个片段

//for negative side button
    alertDialog.getButton(dialog.BUTTON_NEGATIVE).setTextColor(neededColor); 
//for positive side button
    alertDialog.getButton(dialog.BUTTON_POSITIVE).setTextColor(neededColor);

你可以设置主题。正如您所指出的,这些按钮默认使用主题中的 accentColor 作为 textColor,要更改它,您应该:

在 res/values/styles 中修改您的应用主题。xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="buttonBarPositiveButtonStyle">@style/Base.Widget.AppCompat.Button.Borderless.MyStyle</item>
</style>

并将您的按钮样式添加到 AlertDialog 按钮的主题中

<style name="Base.Widget.AppCompat.Button.Borderless.MyStyle">
    <item name="android:textColor">@color/colorAccent</item>
</style>

备注

这会影响所有的 AlertDialogs,而不仅仅是一个。您还可以创建一个新的单独主题并添加到 AlertDialog.Builder 中,例如 new AlertDialog.Builder(getActivity(), R.style.MyAlertDialogTheme)