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.