Подтвердить что ты не робот

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

Я написал код 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
    }
4b9b3361

Ответ 1

Если вам просто нужна легкая тема и вы не знаете конкретного цвета, вы можете передать идентификатор темы в конструктор AlertDialog.Builder.

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

или

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

Ответ 2

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

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

Ответ 3

Кредит отправляется Сушил

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

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

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

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

Ответ 4

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

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

где CUSTOM_COLOR находится в 8-разрядном шестнадцатеричном формате, например. 0xFF303030. Здесь FF - значение альфа, а остальное - значение цвета в шестнадцатеричном формате.

Ответ 5

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

Ответ 6

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

Ответ 7

Для того, чтобы изменить кнопки диалога и цвета фона, вам нужно будет расширить тему диалога, например:

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

Ответ 8

Вы можете использовать собственный стиль:

  <!-- Alert Dialog -->
  <style name="ThemeOverlay.MaterialComponents.MaterialAlertDialog_Background" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
    <!-- Background Color-->
    <item name="android:background">@color/.....</item>
    <!-- Text Color for title and message -->
    <item name="colorOnSurface">@color/......</item>
    <!-- Style for positive button -->
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
    <!-- Style for negative button -->
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
  </style>

  <style name="PositiveButtonStyle" parent="@style/Widget.MaterialComponents.Button">
    <!-- text color for the button -->
    <item name="android:textColor">@color/.....</item>
    <!-- Background tint for the button -->
    <item name="backgroundTint">@color/primaryDarkColor</item>
  </style>

И просто используйте значение по умолчанию MaterialAlertDialogBuilder:

    new MaterialAlertDialogBuilder(AlertDialogActivity.this,
        R.style.ThemeOverlay_MaterialComponents_MaterialAlertDialog_Background)
        .setTitle("Dialog")
        .setMessage("Message...  ....")
        .setPositiveButton("Ok", /* listener = */ null)
        .show();

enter image description here

Ответ 9

Используйте setInverseBackgroundForced(true) в построителе диалогового окна предупреждения, чтобы инвертировать фон.

Ответ 10

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

import android.app.AlertDialog;

к

import android.support.v7.app.AlertDialog;

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