Comment supprimer le fond noir d'une boîte de dialogue sous Android. La photo montre le problème.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Comment supprimer le fond noir d'une boîte de dialogue sous Android. La photo montre le problème.
final Dialog dialog = new Dialog(Screen1.this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.themechanger);
Réponses:
Ajoutez ce code
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Ou celui-ci à la place:
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>
utiliser en java
Dialog dialog = new Dialog(this, R.style.NewDialog);
J'espère vous aider!
J'ai fait face au problème le plus simple et la solution que j'ai trouvée consistait à appliquer un THÈME bachground transparent. Écrivez ces lignes dans vos styles
<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>
Et puis ajoutez
android:theme="@style/Theme.Transparent"
dans votre fichier manifeste principal, à l'intérieur du bloc de l'activité de dialogue.
Plus dans votre ensemble XML d'activité de dialogue
android:background= "#00000000"
D'une manière ou d'une autre, la solution Zacharias n'a pas fonctionné pour moi, j'ai donc utilisé le thème ci-dessous pour résoudre ce problème ...
<style name="DialogCustomTheme" parent="android:Theme.Holo.Dialog.NoActionBar">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
On peut définir ce thème pour dialoguer comme ci-dessous
final Dialog dialog = new Dialog(this, R.style.DialogCustomTheme);
Prendre plaisir!!
Vous pouvez utiliser:
setBackgroundDrawable(null);
Et voici le document:
/**
* 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
*/
La fenêtre de dialogue remplit la couleur d'arrière-plan noire ou la couleur de thème par défaut, vous devez donc définir l' TRANSPARENT
arrière-plan dans la boîte de dialogue. Essayez le code ci-dessous: -
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();
si vous voulez détruire le fond sombre du dialogue, utilisez ceci
dialog.getWindow().setDimAmount(0);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Objects.requireNonNull(alertDialog.getWindow()).setDimAmount(0); }
Un problème que j'ai trouvé avec toutes les réponses existantes est que les marges ne sont pas préservées. En effet, ils remplacent tous l' android:windowBackground
attribut, qui est responsable des marges, par une couleur unie. Cependant, j'ai creusé dans le SDK Android et trouvé l'arrière-plan de la fenêtre par défaut dessinable, et l'ai légèrement modifié pour permettre des dialogues transparents.
Tout d'abord, copiez /platforms/android-22/data/res/drawable/dialog_background_material.xml dans votre projet. Ou copiez simplement ces lignes dans un nouveau fichier:
<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>
Notez que ce android:color
paramètre est défini sur ?attr/colorBackground
. Il s'agit du gris / blanc uni par défaut que vous voyez. Pour permettre à la couleur définie dans android:background
votre style personnalisé d'être transparente et d'afficher la transparence, tout ce que nous avons à faire est de passer ?attr/colorBackground
à @android:color/transparent
. Maintenant, cela ressemblera à ceci:
<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>
Après cela, accédez à votre thème et ajoutez ceci:
<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>
Assurez-vous de remplacer newly_created_background_name
par le nom réel du fichier dessinable que vous venez de créer et de le remplacer some_transparent_color
par l'arrière-plan transparent souhaité.
Après cela, tout ce que nous devons faire est de définir le thème. Utilisez-le lors de la création de AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Ensuite, construisez, créez et affichez la boîte de dialogue comme d'habitude!
C'est ce que j'ai fait pour obtenir la translucidité avec AlertDialog.
Créé un style personnalisé:
<style name="TranslucentDialog" parent="@android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="android:colorBackground">#32FFFFFF</item>
</style>
Et puis créez la boîte de dialogue avec:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
Dans mon cas, la solution fonctionne comme ceci:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
Et en plus en Xml de dialogue personnalisé:
android:alpha="0.8"
utilisez ce code ça marche avec moi:
Dialog dialog = new Dialog(getActivity(),android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
Définissez ces codes de style dans le 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>
Et changez simplement false en vrai en dessous de la ligne
<item name="android:backgroundDimEnabled">true</item>
Cela obscurcira votre arrière-plan.
Attention: n'utilisez pas le générateur pour changer l'arrière-plan.
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
changer pour
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.show();
Lorsque vous utilisez Dialog.builder, il ne donne aucune getWindow()
option.
Window window = d.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
c'est ma façon, vous pouvez essayer!
Si vous avez prolongé la DialogFrament
classe, vous pouvez définir le thème avec:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
Et puis créez le thème personnalisé dans votre fichier styles.xml (voir la réponse de @ LongLv pour les paramètres)
N'oubliez pas d'ajouter <item name="android:windowCloseOnTouchOutside">true</item>
si vous souhaitez que la boîte de dialogue se ferme si l'utilisateur touche en dehors de la boîte de dialogue.
Pour toute personne utilisant une boîte de dialogue personnalisée avec une classe personnalisée, vous devez modifier la transparence de la classe, ajoutez cette ligne dans onCreate ():
getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Assure-toi R.layout.themechanger
n'y a pas de couleur d'arrière-plan car par défaut, la boîte de dialogue a une couleur d'arrière-plan par défaut.
Vous devez également ajouter dialog.getWindow().setBackgroundDrawable(newColorDrawable(Color.TRANSPARENT));
et enfin
<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>