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.
How to limit Dialog's max height?
时间: 2024-09-29 17:27:20