Attività Android come finestra di dialogo
-
22-09-2019 - |
Domanda
Ho un'attività denominata whereActity
che ha anche dialoghi figlio.Ora, voglio visualizzare questa attività come una finestra di dialogo per un'altra attività.
Come lo posso fare?
Soluzione
Per iniziare attività di dialogo ho definito in questo modo in AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Utilizzare questa proprietà all'interno del tag activity
per evitare che il vostro dialogo appare nell'elenco applicazioni utilizzate di recente
android:excludeFromRecents="true"
Se si desidera interrompere la vostra finestra / attività dalla distruzione quando l'utente fa clic al di fuori della finestra di dialogo:
Dopo setContentView()
nel vostro uso Activity
:
this.setFinishOnTouchOutside(false);
Ora, quando chiamo startActivity()
viene visualizzato come una finestra, con la precedente attività visualizzato quando l'utente preme il tasto back.
Si noti che se si utilizza ActionBarActivity
(o AppCompat tema), è necessario utilizzare @style/Theme.AppCompat.Dialog
posto.
Altri suggerimenti
Utilizza questo codice in modo che l'attività finestra di dialogo non verrà chiusa quando l'utente tocca al di fuori della finestra di dialogo:
this.setFinishOnTouchOutside(false);
richiede livello API 11
È possibile definire questo stile in valori / styles.xml per eseguire un ex Splash di più:
<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>
e usarlo AndroidManifest.xml:
<activity android:name=".SplashActivity"
android:configChanges="orientation"
android:screenOrientation="sensor"
android:theme="@style/Theme.UserDialog">
1 - È possibile utilizzare la stessa attività sia come schermata di dialogo e pieno, in modo dinamico:
setTheme(android.R.style.Theme_Dialog)
di chiamata prima di chiamare setContentView(...)
e super.oncreate()
nella vostra attività.
2 - Se non si prevede di modificare lo stile di attività a tema è possibile utilizzare
<activity android:theme="@android:style/Theme.Dialog" />
(come detto da @faisal khan)
Se avete bisogno di AppCompat Version
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>
Se la vostra attività è resa come una finestra, è sufficiente aggiungere un pulsante per XML di vostra attività,
<Button
android:id="@+id/close_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
Quindi collegare un clic ascoltatore nel codice Java di attività. Nel ascoltatore, è sufficiente chiamare finish()
Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Questo dovrebbe respingere la vostra finestra di dialogo, è il ritorno all'attività di chiamata.
Se desideri rimuovere l'intestazione dell'attività e fornire una visualizzazione personalizzata per la finestra di dialogo, aggiungi quanto segue al blocco attività del tuo manifest
android:theme="@style/Base.Theme.AppCompat.Dialog"
e progetta il tuo layout_attività con la vista desiderata
Imposta il tema nel file manifest Android.
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
E impostare lo stato di finestra sul touch alla fine.
this.setFinishOnTouchOutside(false);