web-dev-qa-db-fra.com

Créer une boîte de dialogue transparente au-dessus de l'activité

Contexte

J'essaie de mettre une couche au-dessus de l'activité actuelle qui aurait une explication de ce qui se passe sur l'écran actuel, similaire à ce qui se passe sur contact + app .

Je sais qu'il existe des solutions pour cela (comme la bibliothèque showCase et la bibliothèque superToolTips), et je sais aussi que je peux créer une vue et la définir en haut en l'ajoutant à la fenêtre de l'activité , mais je dois mettre une couche de dialogue entière sur le dessus.

Problème

Peu importe ce que j'essaie, chaque solution ne fonctionne pas comme j'en ai besoin pour fonctionner.

en bref, ce dont j'ai besoin c'est:

  • dialogue plein écran.

  • aucune modification (ni visuelle ni logique) de la barre d'actions, de la barre de notification et du contenu de l'activité derrière, ce qui signifie que tout ce qui se trouve derrière la boîte de dialogue reste le même, il était affiché un moment avant la boîte de dialogue.

  • être transparent, sauf pour les vues que j'utilise pour la boîte de dialogue, qui devraient être affichées normalement.

ce que j'ai essayé

Malheureusement, je n'ai toujours qu'une partie des choses dont j'avais besoin.

voici mon code:

styles.xml:

<style name="full_screen_dialog">
        <item name="Android:windowFrame">@null</item>
        <item name="Android:windowIsFloating">true</item>
        <item name="Android:windowContentOverlay">@null</item>
        <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
        <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

MainActivity.Java:

...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();

Ce code mettra la mise en page au-dessus de l'activité, mais malheureusement, il n'a aucune transparence, même si je l'ai définie. La mise en page que j'ai utilisée est très simple, c'est pourquoi je ne la poste pas.

Question

qu'est-ce que je rate ? que faut-il faire pour corriger le code?

comment puis-je rendre la boîte de dialogue transparente, plein écran ET qu'elle ne changera pas la barre d'action et la barre de notifications.


Solution de travail

EDIT: après avoir trouvé une bonne solution, voici le code de travail:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.floating_tutorial);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}
42
android developer

Modifiez simplement la couleur d'arrière-plan de votre boîte de dialogue:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

Éditer:

Cela empêche le faible effet:

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
54
Steve Benett

Ajoutez juste ceci, cela fonctionne vraiment!

<item name="Android:windowIsTranslucent">true</item>
        <item name="Android:windowCloseOnTouchOutside">true</item>
        <item name="Android:windowBackground">@Android:drawable/alert_dark_frame</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>
3
Javier Rodriguez