Show AlertDialog in any position of the screen

AndroidAndroid LayoutAndroid Ui

Android Problem Overview


When we show an AlertDialog in android it shows in the center of the screen. Is there any way to change the position?

Android Solutions


Solution 1 - Android

After searching in various post I have found the solution.

The code is posted below:

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();

Here x position's value is pixels from left to right. For y position value is from bottom to top.

Solution 2 - Android

If you for example want to move the progressdialog a bit further down, and not set the exact pixel position, then this is sufficient:

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;

Solution 3 - Android

To make the setting come info effect, I added the following code dialog.getWindow().setAttributes(wmlp);

after change the value of wmlp in gypsicoder‘s answer, or the setting of wmlp doesn't take into effect by my test.

Solution 4 - Android

These answers will move the position of the AlertDialog, however, the position of the displayed dialog will also include the padding around the dialog.

If you want to get rid of this padding (for example, to place your dialog flush against the bottom of the screen), you will also need to override the default AlertDialog style in your styles.xml to set the windowBackground to null, like so:

<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> 

As well as setting the Window.LayoutParameters as described in the accepted answer.

Special shout-out to @David Caunt whose answer at: https://stackoverflow.com/questions/8836938/remove-border-padding-from-dialog completed this picture.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiongypsicoderView Question on Stackoverflow
Solution 1 - AndroidgypsicoderView Answer on Stackoverflow
Solution 2 - AndroidpgsandstromView Answer on Stackoverflow
Solution 3 - AndroidjuejiangView Answer on Stackoverflow
Solution 4 - AndroidHappyKatzView Answer on Stackoverflow