|  | @@ -13,13 +13,13 @@ import android.support.v4.view.animation.FastOutSlowInInterpolator;
 | 
	
		
			
			| 13 | 13 |  import android.support.v7.app.AppCompatActivity;
 | 
	
		
			
			| 14 | 14 |  import android.view.View;
 | 
	
		
			
			| 15 | 15 |  import android.view.ViewGroup;
 | 
	
		
			
			|  | 16 | +import android.view.ViewTreeObserver;
 | 
	
		
			
			| 16 | 17 |  import android.view.Window;
 | 
	
		
			
			| 17 | 18 |  import android.view.WindowManager;
 | 
	
		
			
			| 18 | 19 |  import android.widget.RelativeLayout;
 | 
	
		
			
			| 19 | 20 |  
 | 
	
		
			
			| 20 | 21 |  import com.reactnativenavigation.R;
 | 
	
		
			
			| 21 | 22 |  import com.reactnativenavigation.params.LightBoxParams;
 | 
	
		
			
			| 22 |  | -import com.reactnativenavigation.screens.Screen;
 | 
	
		
			
			| 23 | 23 |  import com.reactnativenavigation.utils.ViewUtils;
 | 
	
		
			
			| 24 | 24 |  
 | 
	
		
			
			| 25 | 25 |  import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
 | 
	
	
		
			
			|  | @@ -48,14 +48,18 @@ public class LightBox extends Dialog implements DialogInterface.OnDismissListene
 | 
	
		
			
			| 48 | 48 |          }
 | 
	
		
			
			| 49 | 49 |      }
 | 
	
		
			
			| 50 | 50 |  
 | 
	
		
			
			| 51 |  | -    private void createContent(final Context context, LightBoxParams params) {
 | 
	
		
			
			|  | 51 | +    private void createContent(final Context context, final LightBoxParams params) {
 | 
	
		
			
			| 52 | 52 |          lightBox = new RelativeLayout(context);
 | 
	
		
			
			| 53 | 53 |          lightBox.setAlpha(0);
 | 
	
		
			
			| 54 |  | -        content = new ContentView(context, params.screenId, params.navigationParams);
 | 
	
		
			
			| 55 |  | -        content.setAlpha(0);
 | 
	
		
			
			|  | 54 | +        lightBox.setBackgroundColor(params.backgroundColor.getColor());
 | 
	
		
			
			|  | 55 | +
 | 
	
		
			
			| 56 | 56 |          RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT);
 | 
	
		
			
			|  | 57 | +        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
 | 
	
		
			
			|  | 58 | +        lp.height = WindowManager.LayoutParams.MATCH_PARENT;
 | 
	
		
			
			|  | 59 | +
 | 
	
		
			
			|  | 60 | +        content = new ContentView(context, params.screenId, params.navigationParams);
 | 
	
		
			
			| 57 | 61 |          lp.addRule(RelativeLayout.CENTER_IN_PARENT, content.getId());
 | 
	
		
			
			| 58 |  | -        lightBox.setBackgroundColor(params.backgroundColor.getColor());
 | 
	
		
			
			|  | 62 | +        content.setAlpha(0);
 | 
	
		
			
			| 59 | 63 |          lightBox.addView(content, lp);
 | 
	
		
			
			| 60 | 64 |  
 | 
	
		
			
			| 61 | 65 |          if (params.tapBackgroundToDismiss) {
 | 
	
	
		
			
			|  | @@ -66,20 +70,29 @@ public class LightBox extends Dialog implements DialogInterface.OnDismissListene
 | 
	
		
			
			| 66 | 70 |                  }
 | 
	
		
			
			| 67 | 71 |              });
 | 
	
		
			
			| 68 | 72 |          }
 | 
	
		
			
			| 69 |  | -
 | 
	
		
			
			| 70 |  | -        content.setOnDisplayListener(new Screen.OnDisplayListener() {
 | 
	
		
			
			|  | 73 | +        content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
 | 
	
		
			
			| 71 | 74 |              @Override
 | 
	
		
			
			| 72 |  | -            public void onDisplay() {
 | 
	
		
			
			| 73 |  | -                content.getLayoutParams().height = content.getChildAt(0).getHeight();
 | 
	
		
			
			| 74 |  | -                content.getLayoutParams().width = content.getChildAt(0).getWidth();
 | 
	
		
			
			| 75 |  | -                content.setBackgroundColor(Color.TRANSPARENT);
 | 
	
		
			
			| 76 |  | -                ViewUtils.runOnPreDraw(content, new Runnable() {
 | 
	
		
			
			| 77 |  | -                    @Override
 | 
	
		
			
			| 78 |  | -                    public void run() {
 | 
	
		
			
			| 79 |  | -                        animateShow();
 | 
	
		
			
			|  | 75 | +            public void onGlobalLayout() {
 | 
	
		
			
			|  | 76 | +                // Note that this may be called multiple times as the lightbox views get built.  We want to hold off
 | 
	
		
			
			|  | 77 | +                // doing anything here until the lightbox screen and its measurements are available.
 | 
	
		
			
			|  | 78 | +                final View lightboxScreen = content.getChildAt(0);
 | 
	
		
			
			|  | 79 | +                if (lightboxScreen != null) {
 | 
	
		
			
			|  | 80 | +                    final int screenHeight = lightboxScreen.getHeight();
 | 
	
		
			
			|  | 81 | +                    final int screenWidth = lightboxScreen.getWidth();
 | 
	
		
			
			|  | 82 | +                    if (screenHeight > 0 && screenWidth > 0) {
 | 
	
		
			
			|  | 83 | +                        content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
 | 
	
		
			
			|  | 84 | +                        content.getLayoutParams().height = screenHeight;
 | 
	
		
			
			|  | 85 | +                        content.getLayoutParams().width = screenWidth;
 | 
	
		
			
			|  | 86 | +                        content.setBackgroundColor(Color.TRANSPARENT);
 | 
	
		
			
			|  | 87 | +                        ViewUtils.runOnPreDraw(content, new Runnable() {
 | 
	
		
			
			|  | 88 | +                            @Override
 | 
	
		
			
			|  | 89 | +                            public void run() {
 | 
	
		
			
			|  | 90 | +                                animateShow();
 | 
	
		
			
			|  | 91 | +                            }
 | 
	
		
			
			|  | 92 | +                        });
 | 
	
		
			
			| 80 | 93 |  
 | 
	
		
			
			| 81 | 94 |                      }
 | 
	
		
			
			| 82 |  | -                });
 | 
	
		
			
			|  | 95 | +                }
 | 
	
		
			
			| 83 | 96 |              }
 | 
	
		
			
			| 84 | 97 |          });
 | 
	
		
			
			| 85 | 98 |          setContentView(lightBox, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
 | 
	
	
		
			
			|  | @@ -95,7 +108,8 @@ public class LightBox extends Dialog implements DialogInterface.OnDismissListene
 | 
	
		
			
			| 95 | 108 |          animateHide();
 | 
	
		
			
			| 96 | 109 |      }
 | 
	
		
			
			| 97 | 110 |  
 | 
	
		
			
			| 98 |  | -    @Override public void onBackPressed() {
 | 
	
		
			
			|  | 111 | +    @Override
 | 
	
		
			
			|  | 112 | +    public void onBackPressed() {
 | 
	
		
			
			| 99 | 113 |          if (cancelable) {
 | 
	
		
			
			| 100 | 114 |              hide();
 | 
	
		
			
			| 101 | 115 |          }
 |