Изменение цвета фона всплывающего окна

Я написал код, который показывает всплывающее окно, но я хочу изменить цвет фона с черного на белый , и цвет писать.

Это код диалогового окна:

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
    }

7 ответов


Если вы просто хотите светлую тему и не конкретизируете конкретный цвет, вы можете передать идентификатор темы в AlertDialog.Конструктор-конструктор.

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

или

AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...

чтобы расширить ответ @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, потому что вы не изменяете размер диалога. Если вы установите фоновый рисунок окна, вы перезапишете некоторую существующую размерную информацию и получите диалог, который не является стандартной шириной.

если вы установите фон на тему и установите тему в диалоговом окне, вы получите диалоговое окно, окрашенное так, как вы хотите, но все же правильную ширину.


заслуга сушил

создайте свой AlertDialog как обычно:

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

после вызов show () в диалоговом окне установите цвет фона следующим образом:

dialog.getWindow().setBackgroundDrawableResource(android.R.color.background_dark);

для любого диалога под названием myDialog, после вызова myDialog.show(); вы можете по телефонам:

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

здесь CUSTOM_COLOR в 8-значном шестнадцатеричном формате, ex. 0xFF303030. Вот,FF - это альфа-значение, а остальное-значение цвета в hex.


можно создать пользовательский 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);

использовать setInverseBackgroundForced(true) в диалоговом окне Alert builder для инвертирования фона.


обновите только импорт.

import android.app.AlertDialog;

to

import android.support.v7.app.AlertDialog;

это будет исправлено.