Risposte:
Per iniziare l'attività come finestra di dialogo, l'ho definita in questo modo in AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Utilizzare questa proprietà all'interno del activity
tag per evitare che la finestra di dialogo venga visualizzata nell'elenco delle app utilizzate di recente
android:excludeFromRecents="true"
Se si desidera interrompere la distruzione della finestra di dialogo / attività quando l'utente fa clic all'esterno della finestra di dialogo:
Dopo setContentView()
l' Activity
uso:
this.setFinishOnTouchOutside(false);
Ora quando chiamo startActivity()
viene visualizzato come una finestra di dialogo, con l'attività precedente mostrata quando l'utente preme il pulsante Indietro.
Nota che se stai usando ActionBarActivity
(o tema AppCompat), dovrai @style/Theme.AppCompat.Dialog
invece usarlo .
@style/Theme.AppCompat.Dialog
this.setFinishOnTouchOutside(false);
dopo setContentView()
per evitare che l'attività venga distrutta quando si fa clic al di fuori della finestra di dialogo creata.
Utilizzare questo codice in modo che l'attività della finestra di dialogo non venga chiusa quando l'utente tocca all'esterno della finestra di dialogo:
this.setFinishOnTouchOutside(false);
richiede il livello API 11
Puoi definire questo stile in valori / styles.xml per eseguire una Splash più precedente:
<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 usalo AndroidManifest.xml:
<activity android:name=".SplashActivity"
android:configChanges="orientation"
android:screenOrientation="sensor"
android:theme="@style/Theme.UserDialog">
@drawable/trans
: dovresti essere in grado di usare @android:color/transparent
ciò che creerebbe un ColorDrawable
da usare come sfondo.
1 - È possibile utilizzare la stessa attività di dialogo e schermo intero, in modo dinamico:
Chiama setTheme(android.R.style.Theme_Dialog)
prima di chiamare setContentView(...)
e super.oncreate()
nella tua attività.
2 - Se non prevedi di cambiare lo stile del tema dell'attività, puoi usarlo
<activity android:theme="@android:style/Theme.Dialog" />
(come menzionato da @faisal khan)
<activity android:theme="@android:style/Theme.Dialog" />
) e il tema di programmazione serie di attività da una finestra o un'attività in onCreate stackoverflow.com/a/35915764/2898715
Se hai bisogno della versione di 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>
yourmanifest.xml
<activity
android:name=".MyActivity"
android:label="@string/title"
android:theme="@style/AppDialogTheme">
</activity>
<item name="windowNoTitle">true</item>
per farlo funzionare per me. Ho anche aggiunto <item name="android:windowActionBar">false</item>
per buona misura.
<item name="android:windowNoTitle">true</item>
non ha funzionato (Android 5.0.1) e ho dovuto passare a<item name="windowNoTitle">true</item>
Se la tua attività viene visualizzata come una finestra di dialogo, aggiungi semplicemente un pulsante all'xml della tua attività,
<Button
android:id="@+id/close_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Dismiss" />
Quindi collegare un listener di clic nel codice Java dell'attività. Nell'ascoltatore, chiama semplicementefinish()
Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
Ciò dovrebbe chiudere la finestra di dialogo, riportandoti all'attività di chiamata.
Se si desidera rimuovere l'intestazione dell'attività e fornire una vista personalizzata per la finestra di dialogo, aggiungere quanto segue al blocco attività di manifest
android:theme="@style/Base.Theme.AppCompat.Dialog"
e progetta il tuo activity_layout con la vista desiderata
Imposta il tema nel tuo file manifest Android.
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
E imposta lo stato della finestra di dialogo al tocco per terminare.
this.setFinishOnTouchOutside(false);
Crea attività come finestra di dialogo, ecco un esempio completo
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>
Alcune volte è possibile ottenere l'eccezione fornita di seguito
Causato da: java.lang.IllegalStateException: è necessario utilizzare un tema Theme.AppCompat (o discendente) con questa attività.
Quindi per risolvere puoi usare una soluzione semplice
aggiungi il tema della tua attività in manifest come finestra di dialogo per appCompact.
android:theme="@style/Theme.AppCompat.Dialog"
Può essere utile per qualcuno.