ダイアログの背景色をプログラムで変更するにはどうすればいいですか? 質問する

ダイアログの背景色をプログラムで変更するにはどうすればいいですか? 質問する

ユーザーが背景色を好みの色に変更できる (設定を介して) メイン アクティビティがあります。問題は、カスタム ダイアログの背景色を変更できないことです。

Stack Overflow の他の回答では次のことが示唆されています:

(ア)デフォルトのテーマを上書きする好みの色に変更します。実行時にテーマを変更することは推奨されないため、この場合は適切な解決策ではないと思います。

(ロ)style.xml の変更(実行時に変更できないため、この場合は適していません)

(ハ)AlertBuilder クラスのオーバーライド(ただし、これによりアラートダイアログ全体が色づきます)

色の変更に最も近いのは、アラート ビルダーのタイトルを削除し、カスタム ビューの背景を好みの色 (例: ピンク) に設定することです。残念ながら、これによりダイアログの上部と下部に醜いストリップが表示されます。

コードは画像の後に含まれています。ダイアログの背景を変更する方法についての提案をいただければ幸いです。

ダイアログの外観

デフォルトの外観のコード

protected Dialog onCreateDialog(int dialogId) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);


        final View viewMessEdit = inflater.inflate(R.layout.example,(ViewGroup) findViewById(R.id.dialog_mess_edit_root));
              builder.setView(viewMessEdit);
        builder.setTitle("Alert builder's title");
}

カスタム ダイアログ ビューの背景色を変更するためのコード (アラート ビルダーのタイトルは削除されます)

protected Dialog onCreateDialog(int dialogId) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);


        final View viewMessEdit = inflater.inflate(R.layout.example,(ViewGroup) findViewById(R.id.dialog_mess_edit_root));
              builder.setView(viewMessEdit);
              viewMessEdit.setBackgroundResource(R.color.pink_dark);

}

ベストアンサー1

1つのルールで解決できる方法を見つけました!

d.getWindow().setBackgroundDrawableResource(R.drawable.menubackground);

通常のダイアログでは動作します。ただし、 で動作するかどうかはわかりませんAlertDialog

おすすめ記事