博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

How to limit Dialog's max height?

Posted on 2014-07-17 14:05  haobo  阅读(252)  评论(0编辑  收藏  举报

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.