web-dev-qa-db-ja.com

ポップアップダイアログの背景色を変更する

Androidポップアップダイアログを表示するコードを書きましたが、背景色を黒から白に変更してから、文章の色を変更したいです。

これはダイアログのコードです:

mPrefs = PreferenceManager.getDefaultSharedPreferences(this);

    Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);

    if (!welcomeScreenShown) {


        String whatsNewText = getResources().getString(R.string.Text);
        new AlertDialog.Builder(this).setMessage(whatsNewText).setPositiveButton(
                R.string.ok, new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();
        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(welcomeScreenShownPref, true);
        editor.commit(); // Very important to save the preference
    }
37
Rick

明るいテーマだけが必要で、特定の色にこだわりがない場合は、AlertDialog.BuilderコンストラクターにテーマIDを渡すことができます。

AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)...

または

AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...
56
Dane White

@DaneWhiteの答えを拡張するために、組み込みのテーマに依存する必要はありません。独自のスタイルを簡単に提供できます。

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="Android:background">@color/myColor</item>
</style>

次に、Builderコンストラクターで適用します。

AlertDialog alertDialog = new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
        ...
        .create();

これは、Android.support.v7.app.AlertDialog または Android.app.AlertDialog

ダイアログのサイズを変更しないため、これは@DummyDataの答えよりもうまく機能します。ウィンドウの背景をドロアブルに設定すると、既存の寸法情報が上書きされ、標準の幅ではないダイアログが表示されます。

テーマに背景を設定し、ダイアログにテーマを設定すると、ダイアログは目的の色になりますが、それでも正しい幅になります。

74
tir38

クレジットは Sushil

通常どおりAlertDialogを作成します。

AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
Dialog dialog = dialog.create();
dialog.show();

ダイアログでshow()を呼び出した後、背景色を次のように設定します。

dialog.getWindow().setBackgroundDrawableResource(Android.R.color.background_dark);
29
DummyData

myDialogというダイアログについては、myDialog.show();を呼び出した後、次を呼び出すことができます。

myDialog.getWindow().getDecorView().getBackground().setColorFilter(new LightingColorFilter(0xFF000000, CUSTOM_COLOR));

どこ CUSTOM_COLORは8桁の16進形式です(例: 0xFF303030。ここで、FFはアルファ値で、残りは16進数のカラー値です。

10
kiko283

アプリのAllダイアログとポップアップの背景色を変更するには、colorBackgroundFloating属性を使用します。

<style name="MyApplicationTheme" parent="@style/Theme.AppCompat.NoActionBar">
...
<item name="colorBackgroundFloating">
    @color/background</item>
<item name="Android:colorBackgroundFloating" tools:targetApi="23">
    @color/background</item>
...
</style>

ドキュメンテーション:

colorBackgroundFloating

2
Maksim Ivanov

ダイアログボタンと背景色を変更するには、Dialogテーマを拡張する必要があります。例:

<style name="MyDialogStyle" parent="Android:Theme.Material.Light.Dialog.NoActionBar">
    <item name="Android:buttonBarButtonStyle">@style/MyButtonsStyle</item>
    <item name="Android:colorBackground">@color/white</item>
</style>

<style name="MyButtonsStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="Android:textColor">@color/light.blue</item>
</style>

その後、このカスタムスタイルをダイアログビルダーに渡す必要があります。このような:

AlertDialog.Builder(requireContext(), R.style.MyDialogStyle)

ダイアログ内のテキストの色を変更する場合は、このビルダーにカスタムビューを渡すことができます。

AlertDialog.Builder.setView(View)

または

AlertDialog.Builder.setView(@LayoutResource int)
1
marcinP

カスタムalertDialogを作成し、xmlレイアウトを使用できます。レイアウトでは、背景色とテキスト色を設定できます。

このようなもの:

Dialog dialog = new Dialog(this, Android.R.style.Theme_Translucent_NoTitleBar);
LayoutInflater inflater = (LayoutInflater)ActivityName.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout,(ViewGroup)findViewById(R.id.layout_root));
dialog.setContentView(view);
1
Sushil