Lorsque nous affichons un AlertDialog dans Android, il apparaît au centre de l'écran. Y a-t-il un moyen de changer la position?
Lorsque nous affichons un AlertDialog dans Android, il apparaît au centre de l'écran. Y a-t-il un moyen de changer la position?
Réponses:
Après avoir cherché dans divers articles, j'ai trouvé la solution.
Le code est affiché ci-dessous:
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();
Ici, la valeur de la position x correspond aux pixels de gauche à droite. Pour la position y, la valeur est de bas en haut.
wmlp.x = 100; //x position wmlp.y = 100;
vous venez de gravité ensemble wmlp.gravity = Gravity.TOP | Gravity.LEFT;
est assez
Si, par exemple, vous souhaitez déplacer la boîte de dialogue de progression un peu plus bas et ne pas définir la position exacte du pixel, cela suffit:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Ces réponses déplaceront la position de AlertDialog, cependant, la position de la boîte de dialogue affichée inclura également le remplissage autour de la boîte de dialogue.
Si vous souhaitez vous débarrasser de ce remplissage (par exemple, pour placer votre boîte de dialogue au ras du bas de l'écran), vous devrez également remplacer le style AlertDialog par défaut dans votre styles.xml pour définir windowBackground sur null, comme ceci :
<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>
En plus de définir les Window.LayoutParameters comme décrit dans la réponse acceptée.
Un cri spécial à @David Caunt dont la réponse à: supprimer la bordure, le rembourrage de Dialog a complété cette image.