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?

enter image description here

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top