Как убрать черный фон из диалогового окна в Android. Рис показывает проблему.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Как убрать черный фон из диалогового окна в Android. Рис показывает проблему.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Ответы:
Добавьте этот код
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Или этот вместо этого:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.getWindow().setBackgroundDrawable(new ColorDrawableResource(R.color.transparent));
dialog.getWindow().setBackgroundDrawableResource(R.color.transparent);
<style name="NewDialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:backgroundDimEnabled">false</item>
<item name="android:background">@android:color/transparent</item>
</style>
использовать в Java
Dialog dialog = new Dialog(this, R.style.NewDialog);
Я надеюсь помочь вам!
Я столкнулся с более простой проблемой, и решение, которое я нашел, заключалось в применении прозрачной темы bachground. Напишите эти строки в ваших стилях
<item name="android:windowBackground">@drawable/blue_searchbuttonpopupbackground</item>
</style>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
А потом добавить
android:theme="@style/Theme.Transparent"
в вашем основном файле манифеста, внутри блока действия диалога.
Плюс в вашем диалоге активность XML установлена
android:background= "#00000000"
Каким-то образом решение Zacharias не сработало для меня, поэтому я использовал следующую тему для решения этой проблемы ...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
Можно установить эту тему для диалога, как показано ниже
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Наслаждаться!!
Вы можете использовать:
setBackgroundDrawable(null);
method.And ниже это документ:
/**
* Set the background to a given Drawable, or remove the background. If the
* background has padding, this View's padding is set to the background's
* padding. However, when a background is removed, this View's padding isn't
* touched. If setting the padding is desired, please use
* {@link #setPadding(int, int, int, int)}.
*
* @param d The Drawable to use as the background, or null to remove the
* background
*/
Всплывающее диалоговое окно заполняет по умолчанию черный фоновый цвет или цвет темы, поэтому необходимо установить TRANSPARENT
фон в диалоговом окне. Попробуйте следующий код: -
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.splash);
dialog.show();
если вы хотите уничтожить темный фон диалога, используйте этот
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Одна проблема, которую я нашел со всеми существующими ответами, состоит в том, что поля не сохранились. Это потому что они все перекрываютandroid:windowBackground
атрибут, отвечающий за поля, сплошным цветом. Тем не менее, я немного покопался в Android SDK и нашел фон окна по умолчанию для рисования, и немного изменил его, чтобы позволить прозрачные диалоги.
Сначала скопируйте /platforms/android-22/data/res/drawable/dialog_background_material.xml в свой проект. Или просто скопируйте эти строки в новый файл:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="?attr/colorBackground" />
</shape>
</inset>
Обратите внимание, что android:color
установлено в ?attr/colorBackground
. Это по умолчанию сплошной серый / белый, который вы видите. Чтобы цвет, определенный в android:background
вашем пользовательском стиле, был прозрачным и показывал прозрачность, все, что нам нужно сделать, - это изменить ?attr/colorBackground
на @android:color/transparent
. Теперь это будет выглядеть так:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@android:color/transparent" />
</shape>
</inset>
После этого перейдите к своей теме и добавьте следующее:
<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
<item name="android:windowBackground">@drawable/newly_created_background_name</item>
<item name="android:background">@color/some_transparent_color</item>
</style>
Убедитесь, что вы заменили newly_created_background_name
фактическим именем только что созданного рисованного файла, и заменитеsome_transparent_color
на желаемый прозрачный фон.
После этого все, что нам нужно сделать, это установить тему. Используйте это при создании AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Затем просто создайте, создайте и покажите диалог как обычно!
Это то, что я сделал, чтобы добиться прозрачности с AlertDialog.
Создан собственный стиль:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
И затем создайте диалог с:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
используйте этот код, он работает со мной:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
Установите код стиля в стиле
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
И просто измените ложь на истину ниже линии
<item name="android:backgroundDimEnabled">true</item>
Это затемнит ваш фон.
Внимание: не используйте конструктор для изменения фона.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
изменить на
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
При использовании Dialog.builder в нем нет getWindow()
опций.
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
это мой способ, вы можете попробовать!
Если вы расширили DialogFrament
класс, вы можете установить тему с помощью:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
А затем создайте собственную тему в своем файле styles.xml (параметры см. В ответе @ LongLv)
Не забудьте добавить, <item name="android:windowCloseOnTouchOutside">true</item>
если вы хотите, чтобы диалог закрывался, если пользователь прикасается к окну.
Для тех, кто использует пользовательский диалог с пользовательским классом, вам нужно изменить прозрачность в классе, добавив эту строку в onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Убедитесь, что R.layout.themechanger
у вас нет цвета фона, потому что по умолчанию диалог имеет цвет фона по умолчанию.
Вы также должны добавить dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
И наконец
<style name="TransparentDialog">
<item name="android:windowIsFloating">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowTitleStyle">@null</item>
</style>