There were several topics regarding this issue, but no perfect solution. What work best for me is:
1. create a global layer "Layout Loader" as a top layer (it can be a blank layer or layer with pretty sprite saying "loading in progress" - whatever suits your app)
2. set its "initial visibility" to "visible" by default
3. just before jumping to the next layout set its "initial visibility" to "visible" (no it's not a mistake, yes I know I just wrote that in point 2, but just keep on reading)
4. On start of layout (every layout) loading screen is still visible because "Layout Loader" is visible by default. Thanks to this user won't even notice when the layout switches. At this time C2 engine loads everything what's below the loading screen (so it basically loads a layout).
Now the good question is "when should I hide the loader screen?". Well you can set some static time with wait function and hide it after - let's say - 6 seconds.
OR
You can be a bit smarter and check when the loading process is done. There is no built in solution to check that (at least I am not aware of it), but you may use the "fps" value. On start of every layout FPS drops drastically because of loading and rendering initial objects.
So you can do something like:
Every 0.3 seconds -> add 1 to "timesChecked" (this is some local static variable)
if FPS >= 30 (let's assume 30 FPS as a minimum fine framerate)
OR
timesChecked >= 20 -> hide "Layout Loader"
So the "Layout Loader" will be hidden as soon as the FPS will get high enough to play game smothly OR after 6 seconds (timesChecked*0.3s). Second condition is important because some devices (older mobiles for instance) might never get 30 FPS even if everything gets loaded and would be stucked with loading screen forever.
This is ofcourse a short example and you can upgade it a bit in a various ways, but I believe you get the point now.