J'ai une activité nommée whereActity
qui a é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?
J'ai une activité nommée whereActity
qui a é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?
Réponses:
Pour démarrer l'activité en tant que dialogue, je l'ai défini comme ceci dans AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Utilisez cette propriété à l'intérieur de votre activity
balise pour éviter que votre boîte de dialogue n'apparaisse 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
utilisation:
this.setFinishOnTouchOutside(false);
Maintenant, lorsque je l'appelle, startActivity()
il s'affiche sous forme de boîte de dialogue, avec l'activité précédente affichée lorsque l'utilisateur appuie sur le bouton de retour.
Notez que si vous utilisez ActionBarActivity
(ou le thème AppCompat), vous devrez utiliser à la @style/Theme.AppCompat.Dialog
place.
@style/Theme.AppCompat.Dialog
this.setFinishOnTouchOutside(false);
après la setContentView()
méthode pour éviter que l'activité ne soit détruite lorsque vous cliquez en dehors de la boîte de dialogue que vous avez créée.
Utilisez ce code pour que l'activité de dialogue ne soit pas fermée lorsque l'utilisateur touche en dehors de la boîte de dialogue:
this.setFinishOnTouchOutside(false);
nécessite l'API niveau 11
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">
@drawable/trans
: vous devriez pouvoir utiliser @android:color/transparent
ce qui créerait un ColorDrawable
à utiliser comme arrière-plans.
1 - Vous pouvez utiliser la même activité que la boîte de dialogue et le plein écran, dynamiquement:
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)
<activity android:theme="@android:style/Theme.Dialog" />
) et définir le thème de l'activité sur une boîte de dialogue ou une activité sur onCreate stackoverflow.com/a/35915764/2898715
Si vous avez besoin de la version compatible avec App
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>
yourmanifest.xml
<activity
android:name=".MyActivity"
android:label="@string/title"
android:theme="@style/AppDialogTheme">
</activity>
<item name="windowNoTitle">true</item>
pour que ça marche pour moi. J'ai également ajouté <item name="android:windowActionBar">false</item>
pour faire bonne mesure.
<item name="android:windowNoTitle">true</item>
n'a pas fonctionné (Android 5.0.1), et j'ai dû changer pour<item name="windowNoTitle">true</item>
Si votre activité est affichée sous forme de boîte de dialogue, ajoutez simplement un bouton au xml de votre activité,
<Button
android:id="@+id/close_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
Attachez ensuite un écouteur de clics dans le code Java de votre activité. Dans l'auditeur, appelez simplementfinish()
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 boîte de 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 activité_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 de la boîte de dialogue au toucher pour terminer.
this.setFinishOnTouchOutside(false);
Créer une activité en tant que boîte de dialogue, voici un exemple complet
AndroidManife.xml
<activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/>
DialogActivity.kt
class DialogActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dialog)
this.setFinishOnTouchOutside(true)
btnOk.setOnClickListener {
finish()
}
}
}
activity_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0072ff"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="@dimen/_300sdp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/txtTitle"
style="@style/normal16Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Download"
android:textColorHint="#FFF" />
<View
android:id="@+id/viewDivider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#fff"
android:backgroundTint="@color/white_90"
app:layout_constraintBottom_toBottomOf="@id/txtTitle" />
<TextView
style="@style/normal14Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Your file is download"
android:textColorHint="#FFF" />
<Button
android:id="@+id/btnOk"
style="@style/normal12Style"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginBottom="20dp"
android:background="@drawable/circle_corner_layout"
android:text="Ok"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
Parfois, vous pouvez obtenir l'exception qui est donnée ci-dessous
Causé par: java.lang.IllegalStateException: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité.
Donc, pour résoudre, vous pouvez utiliser une solution simple
ajoutez le thème de votre activité dans le manifeste en tant que boîte de dialogue pour appCompact.
android:theme="@style/Theme.AppCompat.Dialog"
Cela peut être utile à quelqu'un.