Quando mostriamo un AlertDialog in Android, viene mostrato al centro dello schermo. C'è un modo per cambiare la posizione?
Quando mostriamo un AlertDialog in Android, viene mostrato al centro dello schermo. C'è un modo per cambiare la posizione?
Risposte:
Dopo aver cercato in vari post ho trovato la soluzione.
Il codice è pubblicato di seguito:
private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
if(item == 0) {
} else if(item == 1) {
} else if(item == 2) {
}
}
});
AlertDialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();
wmlp.gravity = Gravity.TOP | Gravity.LEFT;
wmlp.x = 100; //x position
wmlp.y = 100; //y position
dialog.show();
Qui il valore della posizione x è pixel da sinistra a destra. Per la posizione y il valore va dal basso verso l'alto.
wmlp.x = 100; //x position wmlp.y = 100;
, basta impostare la gravità wmlp.gravity = Gravity.TOP | Gravity.LEFT;
è sufficiente
Se ad esempio si desidera spostare la finestra di dialogo di avanzamento un po 'più in basso e non impostare la posizione del pixel esatto, è sufficiente:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Queste risposte sposteranno la posizione di AlertDialog, tuttavia, la posizione della finestra di dialogo visualizzata includerà anche il riempimento intorno alla finestra di dialogo.
Se vuoi sbarazzarti di questo riempimento (ad esempio, per posizionare la tua finestra di dialogo a filo nella parte inferiore dello schermo), dovrai anche sovrascrivere lo stile predefinito di AlertDialog nel tuo styles.xml per impostare windowBackground su null, in questo modo :
<resources>
<!-- Example app theme - mine uses the below -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:alertDialogTheme">@style/MyDialogTheme</item>
</style>
<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- Full width -->
<item name="android:layout_width">fill_parent</item>
<!-- Null window background kills surrounding padding -->
<item name="android:windowBackground">@null</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
Oltre a impostare Window.LayoutParameters come descritto nella risposta accettata.
Un ringraziamento speciale a @David Caunt la cui risposta a: rimuovi bordo, imbottitura dal dialogo ha completato questa immagine.