web-dev-qa-db-ja.com

プログラムでダイアログの背景色を変更する方法は?

私は、ユーザーが背景色を自分の好きな色に(設定を介して)変更できる主な活動をしています。私の問題は、カスタムダイアログの背景色を変更できないことです。

スタックオーバーフローのその他の答えは、次のとおりです。

(a) デフォルトのテーマを上書き 好みの色に。実行時にテーマを変更することはお勧めできませんので、この場合には適切な解決策ではないと思います。

(b) styles.xmlの変更 (実行時に変更できないため、この場合は適切ではありません)

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

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

画像の後にコードが含まれています。ダイアログの背景を変更する方法についての提案は大歓迎です。

Dialog appearance

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

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");
}

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

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);

}
18
Mel

私はちょっと同じ問題に直面しました。そしてそれを解決する唯一の方法は、自分のバージョンのレイアウトを拡張することでした。あなたの場合、それはAlertDialogであることがわかります。私が行うことをお勧めするのは、カスタマイズされたAlertDialogである一意のクラスを作成し、このためのレイアウトを作成してから、これをインフレートすることです。

これが私を大いに助けた投稿です。 http://blog.androgames.net/10/custom-Android-dialog/

この投稿に従い、ダイアログのカスタマイズに関する問題を解決しました。

さらに疑問がある場合は、お知らせください。

ありがとう。

8
rogcg

ワンルールソリューションを見つけました!

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

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

17
user3696814

ダイアログの背景色

dialog.getWindow().setBackgroundDrawableResource(R.color.glassblack);

本当にうまくいきました。

4
S HemaNandhini

カスタムレイアウトを作成せずに、AlertDialogのいくつかのプロパティを操作して複数のデザインを作成できるハックを見つけました。

あなたがしなければならないこと:

AlertDialogが画面に表示されると、OnShowListenerが呼び出されます。したがって、dialog.setOnShowListener(this)を追加することにより、AlertDialogをカスタマイズできます。

コード:

// Create AlertDialog
AlertDialog.Builder adb = new AlertDialog.Builder(context1);
    adb.setTitle(context1.getString(R.string.app_name))
    .setMessage(message)
    .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
});
AlertDialog dialog = adb.create();

// Make some UI changes for AlertDialog
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(final DialogInterface dialog) {

        // Add or create your own background drawable for AlertDialog window
        Window view = ((AlertDialog)dialog).getWindow();
        view.setBackgroundDrawableResource(R.drawable.your_drawable);

        // Customize POSITIVE, NEGATIVE and NEUTRAL buttons.
        Button positiveButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_POSITIVE);
        positiveButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
        positiveButton.setTypeface(Typeface.DEFAULT_BOLD);
        positiveButton.invalidate();

        Button negativeButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
        negativeButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
        negativeButton.setTypeface(Typeface.DEFAULT_BOLD);
        negativeButton.invalidate();

        Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL);
        neutralButton.setTextColor(context1.getResources().getColor(R.color.primaryColor));
        neutralButton.setTypeface(Typeface.DEFAULT_BOLD);
        neutralButton.invalidate();
    }
});
3
activesince93