首页 > 代码库 > How to limit Dialog's max height?

How to limit Dialog's max height?

1. We can make it to play trick in code. 

At Dialog‘s show function, after app has set contentView, we can add a GlobalLayoutListener on decorView‘s ViewTreeObserver. At the listener, we can check the decorView‘s height, if over the max height, just truncate it.

 1 private void resolveAlertDialogHeight() { 2         WindowManager wm = (WindowManager) mContext 3                 .getSystemService(Context.WINDOW_SERVICE); 4         Display display = wm.getDefaultDisplay(); 5  6         Point size = new Point(); 7         display.getSize(size); 8         int height = size.y; 9 10         final int maxHeight = (int) (height * 0.68);11 12         final View decorView = mWindow.getDecorView();13         decorView.getViewTreeObserver().addOnGlobalLayoutListener(14                 new OnGlobalLayoutListener() {15                     @Override16                     public void onGlobalLayout() {17                         int actualHeight = decorView.getMeasuredHeight();18 19                         WindowManager.LayoutParams l = mWindow.getAttributes();20                         if (actualHeight > maxHeight) {21                             l.height = maxHeight;22 23                             mWindow.setAttributes(l);24                         }25 26                         decorView.getViewTreeObserver()27                                 .removeOnGlobalLayoutListener(this);28                     }29                 });30     }

 

2. Modify windowBackground reference png.

The dot9 png referenced by android:windowBackground attr is the Dialog‘s background. We can modify this dot9 png, adding extra padding on top and bottom to limit the margin of Alert.