1. ホーム
  2. android

[解決済み] アンドロイド5で、デフォルトのダイアログボタンのテキスト色を変更する方法

2022-04-17 19:43:58

質問

私のアプリにはたくさんのアラートダイアログがあります。デフォルトのレイアウトですが、ダイアログに正と負のボタンを追加しています。そのため、ボタンの色は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のデフォルトの緑色を取ります。

ありがとうございました。

解決方法は?

を作成してみてください。 AlertDialog オブジェクトを最初に作成し、それを使ってボタンの色を変更する設定をしてから表示します。(なお builder オブジェクトを呼び出すのではなく show() を呼び出します。 create() を取得するために AlertDialog オブジェクトを作成します。

//1. create a dialog object 'dialog'
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); 
AlertDialog dialog = builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    ...
                }

            }).create();

//2. now setup to change color of the button
dialog.setOnShowListener( new OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(COLOR_I_WANT);
    }
});

dialog.show()

で行わなければならない理由は onShow() ダイアログを作成した後にそのボタンを取得することができないのは、ボタンがまだ作成されていないためです。

を変更しました。 AlertDialog.BUTTON_POSITIVE から AlertDialog.BUTTON_NEGATIVE を追加し、ご質問の変更を反映させました。OK"ボタンがネガティブボタンになるのは変ですが。通常はプラスボタンです。