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                     @Override
16                     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.

原文地址:https://www.cnblogs.com/haobo/p/3850830.html