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.