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?
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.
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
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">
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)
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>
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.
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
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);