web-dev-qa-db-fra.com

Android Activité en tant que dialogue

J'ai une activité appelée whereActity qui contient également des dialogues enfants. Maintenant, je veux afficher cette activité comme une boîte de dialogue pour une autre activité.

Comment puis je faire ça?

enter image description here

243
d-man

Pour démarrer l'activité en tant que dialogue, je l'ai défini comme suit dans AndroidManifest.xml:

<activity Android:theme="@Android:style/Theme.Dialog" />

Utilisez cette propriété dans votre balise activity pour éviter que votre boîte de dialogue ne s'affiche dans la liste des applications récemment utilisées.

Android:excludeFromRecents="true"

Si vous souhaitez empêcher la destruction de votre boîte de dialogue/activité lorsque l'utilisateur clique en dehors de la boîte de dialogue:

Après setContentView() dans votre Activity, utilisez:

this.setFinishOnTouchOutside(false);

Maintenant, lorsque j'appelle startActivity(), il s'affiche sous la forme d'une boîte de dialogue, l'activité précédente étant affichée lorsque l'utilisateur appuie sur le bouton Précédent.

Notez que si vous utilisez ActionBarActivity (ou le thème AppCompat), vous devrez utiliser @style/Theme.AppCompat.Dialog à la place.

519
d-man

Utilisez ce code pour que l'activité de la boîte de dialogue ne soit pas fermée lorsque l'utilisateur touche en dehors de la boîte de dialogue:

this.setFinishOnTouchOutside(false);

requiert le niveau 11 de l'API

42
Maverick

Vous pouvez définir ce style dans values ​​/ styles.xml pour effectuer un Splash plus ancien:

   <style name="Theme.UserDialog" parent="Android:style/Theme.Dialog">
        <item name="Android:windowFrame">@null</item>
        <item name="Android:windowIsFloating">true</item>
        <item name="Android:windowIsTranslucent">true</item>
        <item name="Android:windowNoTitle">true</item>
        <item name="Android:background">@Android:color/transparent</item>
        <item name="Android:windowBackground">@drawable/trans</item>
    </style>

Et utilisez-le AndroidManifest.xml:

   <activity Android:name=".SplashActivity"
          Android:configChanges="orientation"
          Android:screenOrientation="sensor"
          Android:theme="@style/Theme.UserDialog">
26
herbertD

1 - Vous pouvez utiliser la même activité de manière dynamique et en plein écran:

Appelez setTheme(Android.R.style.Theme_Dialog) avant d'appeler setContentView(...) et super.oncreate() dans votre activité.

2 - Si vous ne prévoyez pas de changer le style de thème d'activité, vous pouvez utiliser

<activity Android:theme="@Android:style/Theme.Dialog" />

(comme mentionné par @faisal khan)

22
M. Usman Khan

Si vous avez besoin de la version Appcompat

style.xml

    <!-- Base application theme. -->
    <style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="Android:windowNoTitle">true</item>
    </style>

votremanifest.xml

    <activity
          Android:name=".MyActivity"
          Android:label="@string/title"
          Android:theme="@style/AppDialogTheme">
    </activity>
17
neferpitou

Si votre activité est affichée sous forme de dialogue, ajoutez simplement un bouton au fichier XML de votre activité.

<Button
    Android:id="@+id/close_button"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:text="Dismiss" />

Ensuite, attachez un écouteur de clic dans le code Java de votre activité. Dans l'auditeur, appelez simplement finish()

Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

Cela devrait fermer votre dialogue et vous ramener à l'activité d'appel.

16
aaronsnoswell

Si vous souhaitez supprimer l'en-tête d'activité et fournir une vue personnalisée pour la boîte de dialogue, ajoutez ce qui suit au bloc d'activité de votre manifeste.

Android:theme="@style/Base.Theme.AppCompat.Dialog"

et concevez votre activity_layout avec la vue souhaitée

6
Ismail Iqbal

Définissez le thème dans votre fichier manifeste Android.

<activity Android:name=".LoginActivity"
            Android:theme="@Android:style/Theme.Dialog"/>

Et définissez l'état du dialogue en mode tactile pour terminer.

this.setFinishOnTouchOutside(false);
1