Jak usunąć czarne tło z okna dialogowego w systemie Android. Zdjęcie pokazuje problem.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Jak usunąć czarne tło z okna dialogowego w systemie Android. Zdjęcie pokazuje problem.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Odpowiedzi:
Dodaj ten kod
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Lub ten zamiast tego:
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>
używać w java
Dialog dialog = new Dialog(this, R.style.NewDialog);
Mam nadzieję, że ci pomogę!
Stawiłem czoła prostszemu problemowi, a rozwiązaniem, które wymyśliłem, było zastosowanie przezroczystego bachground TEMAT. Napisz te linie w swoich stylach
<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>
A następnie dodaj
android:theme="@style/Theme.Transparent"
w głównym pliku manifestu, wewnątrz bloku działania okna dialogowego.
Plus w twoim zestawie dialogowym aktywności XML
android:background= "#00000000"
Jakoś rozwiązanie Zacharias nie działało dla mnie, więc skorzystałem z poniższego motywu, aby rozwiązać ten problem ...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
Można ustawić ten motyw w oknie dialogowym, jak poniżej
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Cieszyć się!!
Możesz użyć:
setBackgroundDrawable(null);
Metoda. A dokument to:
/**
* 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
*/
Wyskakujące okno dialogowe wypełnia domyślny czarny kolor tła lub kolor motywu, więc musisz ustawić TRANSPARENT
tło w oknie dialogowym. Wypróbuj poniższy kod: -
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();
jeśli chcesz zniszczyć ciemne tło okna dialogowego, użyj tego
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Jednym ze znalezionych przeze mnie problemów jest to, że marginesy nie są zachowane. Dzieje się tak, ponieważ wszystkie nadpisują android:windowBackground
atrybut odpowiadający za marginesy jednolitym kolorem. Jednak zrobiłem trochę kopania w zestawie SDK systemu Android i znalazłem domyślne tło okna do rysowania i zmodyfikowałem go nieco, aby umożliwić przezroczyste okna dialogowe.
Najpierw skopiuj /platforms/android-22/data/res/drawable/dialog_background_material.xml do swojego projektu. Lub po prostu skopiuj te linie do nowego pliku:
<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>
Zauważ, że android:color
jest ustawione na ?attr/colorBackground
. Jest to domyślny jednolity szary / biały, który widzisz. Aby umożliwić kolor określony w android:background
w stylu niestandardowego być przejrzyste i pokazać przejrzystości, wszystko co musisz zrobić, to zmiana ?attr/colorBackground
do @android:color/transparent
. Teraz będzie wyglądać następująco:
<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>
Następnie przejdź do motywu i dodaj to:
<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>
Pamiętaj, aby zastąpić newly_created_background_name
rzeczywistą nazwą właśnie utworzonego pliku do rysowania i zastąpić some_transparent_color
pożądanym przezroczystym tłem.
Po tym wszystkim, co musimy zrobić, to ustawić motyw. Użyj tego podczas tworzenia AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Następnie po prostu zbuduj, utwórz i pokaż okno dialogowe jak zwykle!
Właśnie to zrobiłem, aby osiągnąć przejrzystość dzięki AlertDialog.
Utworzono styl niestandardowy:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
A następnie utwórz okno dialogowe za pomocą:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
W moim przypadku rozwiązanie działa w następujący sposób:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
A dodatkowo w Xml niestandardowego okna dialogowego:
android:alpha="0.8"
Ustaw kod stylu w dobrym stylu
<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>
I po prostu zmień wartość false na true poniżej linii
<item name="android:backgroundDimEnabled">true</item>
Przyciemni twoje tło.
Uwaga: Nie używaj konstruktora do zmiany tła.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
zmień na
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
Podczas korzystania z Dialog.builder nie daje getWindow()
w tym opcji.
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
to moja droga, możesz spróbować!
W przypadku przedłużenia DialogFrament
zajęć możesz ustawić motyw za pomocą:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
A następnie utwórz niestandardowy motyw w pliku styles.xml (parametry @ w odpowiedzi na @ LongLv)
Nie zapomnij dodać, <item name="android:windowCloseOnTouchOutside">true</item>
jeśli chcesz zamknąć okno dialogowe, jeśli użytkownik dotknie poza tym oknem.
Dla każdego, kto używa niestandardowego okna dialogowego z niestandardową klasą, musisz zmienić przezroczystość w klasie, dodaj ten wiersz w onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Upewnij się, że R.layout.themechanger
nie ma koloru tła, ponieważ domyślnie okno dialogowe ma domyślny kolor tła.
Musisz także dodać dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
I w końcu
<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>