17

I created an non-maximized activity using android:theme="@android:style/Theme.Dialog" to make it looks like a dialog. I need to change the position of the activity on screen but I didn't find how to do this...

Arutha
  • 26,088
  • 26
  • 67
  • 80

4 Answers4

24

To change the position (with the theme set to Theme.Dialog), you can override the gravity, size and coordinates of the LayoutParams of your activity's decor view after it has been attached to the window. Here's an example:

@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();

    View view = getWindow().getDecorView();
    WindowManager.LayoutParams lp = (WindowManager.LayoutParams) view.getLayoutParams();
    lp.gravity = Gravity.LEFT | Gravity.TOP;
    lp.x = 10;
    lp.y = 10;
    lp.width = 300;
    lp.height = 300;
    getWindowManager().updateViewLayout(view, lp);
}
Joe
  • 14,039
  • 2
  • 39
  • 49
3

Create a custom theme with Theme.Dialog as its parent:

  <style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">

So, for each item in the Dialog theme that you want to change, use CustomDialogTheme instead of Theme.Dialog inside the Android Manifest. See the android developper docs for details.

JRL
  • 76,767
  • 18
  • 98
  • 146
1

Use .setGravity()

progDialog = ProgressDialog.show();

progDialog.getWindow().setGravity(Gravity.BOTTOM);

Sudhir Khadka
  • 121
  • 1
  • 7
0

For bottom:

Keep this in your activity.

@Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        try {
            View view = getWindow().getDecorView();
            WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams) view.getLayoutParams();
            layoutParams.gravity = Gravity.BOTTOM;
            getWindowManager().updateViewLayout(view, layoutParams);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Note: You can change your gravity by setting this Gravity.BOTTOM (TOP, LEFT, RIGHT)

Surendar D
  • 5,554
  • 4
  • 36
  • 38