Comment puis-je 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);
Ajouter ce code
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
Modifier
dialog.getWindow().setBackgroundDrawableResource(Android.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 proposée consistait à appliquer un THÈME 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 ajouter
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és de dialogue
Android:background= "#00000000"
D'une manière ou d'une autre, la solution de Zacharias ne fonctionnait pas pour moi, alors j'ai 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!!
La boîte de dialogue contextuelle remplit la couleur d'arrière-plan noire ou la couleur de thème par défaut. Vous devez donc définir l'arrière-plan TRANSPARENT
dans la boîte de dialogue. Essayez ci-dessous le code: -
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();
Vous pouvez utiliser le:
setBackgroundDrawable(null);
method.And est la doc suivante:
/**
* 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
*/
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'attribut Android:windowBackground
, responsable des marges, par une couleur unie. Cependant, j'ai fait quelques recherches dans le SDK Android et j'ai trouvé le fond dessinable de la fenêtre par défaut, que j'ai légèrement modifié pour autoriser les dialogues transparents.
Commencez par copier /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 Android:color
est défini sur ?attr/colorBackground
. C'est le gris/blanc plein par défaut que vous voyez. Pour permettre à la couleur définie dans Android:background
dans votre style personnalisé d'être transparente et d'afficher la transparence, il suffit de remplacer ?attr/colorBackground
par @Android:color/transparent
. Maintenant ça va ressembler à ça:
<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, allez à 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 pouvant être dessiné que vous venez de créer et de remplacer some_transparent_color
par le fond transparent souhaité.
Après cela, tout ce que nous devons faire est de définir le thème. Utilisez ceci lors de la création du AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Ensuite, construisez, créez et affichez le dialogue comme d'habitude!
Essayez ceci dans votre code:
getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
ça va marcher ... dans mon cas ...! mon ami
Même solution que zGnep mais utilisant xml:
Android:background="@null"
C'est ce que j'ai fait pour atteindre la transparence avec AlertDialog.
Créé un style personnalisé:
<style name="TranslucentDialog" parent="@Android:style/Theme.DeviceDefault.Dialog.Alert">
<item name="Android:colorBackground">#32FFFFFF</item>
</style>
Et créez ensuite le dialogue avec:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.TranslucentDialog);
AlertDialog dialog = builder.create();
utilise ce code ça marche avec moi:
Dialog dialog = new Dialog(getActivity(),Android.R.style.Theme_Translucent_NoTitleBar);
dialog.show();
Attention :
n'utilisez pas de générateur pour modifier l'arrière-plan
Dialog dialog = new Dialog.Builder(MainActivity.this)
.setView(view)
.create();
dialog.show();dialog.getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
changer à
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
dialog.getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
mDialog.show();
Lors de l'utilisation de Dialog.builder - Cela ne donne pas l'option getwindow ().
Pour quiconque 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 la méthode onCreate ():
getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
si vous voulez détruire le fond sombre du dialogue utilisez cette
dialog.getWindow().setDimAmount(0);
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 true en dessous de la ligne
<item name="Android:backgroundDimEnabled">true</item>
Cela atténuera votre arrière-plan.
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 étendu la classe DialogFrament
, vous pouvez définir le thème avec:
setStyle(DialogFragment.STYLE_NORMAL, R.style.customDialogTheme);
Et ensuite 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.
Dans mon cas, la solution fonctionne comme ceci:
dialog_AssignTag.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
Et en plus, __.in XML de la boîte de dialogue personnalisée:
Android:alpha="0.8"