I re-ran it and I was able to see what you're describing. In my case this didn't work because leftContainerRatio was 1.33. On Friday, October 9, 2020 at 9:16:53 AM UTC+3 P5music wrote:
> So in your case the issue is even worse, if I understand. Isn't it? > If "the same component always take the entire screen" you do not even see > the master detail splitting of the screen if starting in landscape mode, > which I can see. If you start in portrait mode and just see the same > component always taking the entire space after rotating then you clearly > see the issue. > The containers are not important, because the issue is clearly present if > you start in portrait mode and then rotate the device. > So what can be done? > Thanks > Il giorno venerdì 9 ottobre 2020 alle 05:54:46 UTC+2 Shai Almog ha scritto: > >> I ran it but couldn't reproduce the issue. The same component always >> takes over the entire screen. I obviously had to make changes to the code >> since the sample wasn't self contained. >> On Thursday, October 8, 2020 at 1:37:29 PM UTC+3 P5music wrote: >> >>> The issue is now closed because it was not even to be opened. It has >>> some code that reproduces the issue of this thread. >>> Have you tested and reproduced the issue? >>> Can you provide a solution for this thread? >>> >>> Il giorno sabato 3 ottobre 2020 alle 09:50:14 UTC+2 P5music ha scritto: >>> >>>> https://github.com/codenameone/CodenameOne/issues/3281 >>>> >>>> Il giorno sabato 3 ottobre 2020 alle 06:53:07 UTC+2 Shai Almog ha >>>> scritto: >>>> >>>>> I have no idea. If you have a reproducible problem you can extract to >>>>> a test case I can run please file an issue and embed the test case in the >>>>> issue. >>>>> I'll have a look. >>>>> On Thursday, October 1, 2020 at 11:28:43 AM UTC+3 P5music wrote: >>>>> >>>>>> Sorry, but the problem arises only when the app starts in portrait >>>>>> mode, and then an orientation change occurs. >>>>>> However, even if the problem does not arise when starting in >>>>>> landscape mode, >>>>>> layout is set as TableLayout at startup in both cases (or even set >>>>>> every time the method above is called, in a different version). >>>>>> And whatever instruction I add to set the layout it is not changed, >>>>>> it stays BorderLayout. >>>>>> Overriding setLayout shows that nothing strange is happening, but the >>>>>> layout is not set. >>>>>> What is going on with that form? >>>>>> >>>>>> >>>>>> Il giorno giovedì 1 ottobre 2020 alle 05:07:45 UTC+2 Shai Almog ha >>>>>> scritto: >>>>>> >>>>>>> So this must be the problem. >>>>>>> I guess border layout is what you use when in landscape and you >>>>>>> don't update it when moving to portrait. It's hard to tell but you can >>>>>>> just >>>>>>> override form.setLayout() with a call to super. Then place a breakpoint >>>>>>> there to see who invokes it. >>>>>>> On Wednesday, September 30, 2020 at 11:19:39 AM UTC+3 P5music wrote: >>>>>>> >>>>>>>> Forget the "not relevant" part, because conditions are not >>>>>>>> satisfied for it to be executed. >>>>>>>> >>>>>>>> What I experience is that >>>>>>>> when the app starts in landscape mode (simulator was intentionally >>>>>>>> left in that state) >>>>>>>> the user interface correctly displays just the master container at >>>>>>>> full screen (so the detail container is not added yet) >>>>>>>> if I juggle with orientation changes the two modes correctly >>>>>>>> alternate >>>>>>>> >>>>>>>> but the app starts in portrait mode (simulator was intentionally >>>>>>>> left in that state) >>>>>>>> when an orientation change occurs >>>>>>>> and now the simulator is in landscape mode >>>>>>>> (containers are removed) >>>>>>>> >>>>>>>> I see that the master detail TableLayout is not working because >>>>>>>> just the master container is at full screen. >>>>>>>> if I juggle with orientation changes nothing changes. >>>>>>>> Debug shows that the right code is executed at orientation change, >>>>>>>> that is >>>>>>>> if(isTablet() && !isPortrait() ) >>>>>>>> { >>>>>>>> ... >>>>>>>> } >>>>>>>> >>>>>>>> If I step into, I see that mainForm has BorderLayout and not >>>>>>>> TableLayout: >>>>>>>> CallingForm[x=0 y=0 width=2048 height=1534 name=null, layout = >>>>>>>> BorderLayout, scrollableX = false, scrollableY = false, components = >>>>>>>> [Container, Toolbar], title = Label[x=0 y=47 width=1536 height=0 >>>>>>>> name=null, >>>>>>>> text = , gap = 2], visible = true] >>>>>>>> >>>>>>>> but at startup this is executed (I tried also executing it every >>>>>>>> time, see commented lines) >>>>>>>> tl=new TableLayout(1,2); >>>>>>>> mainForm.setLayout(tl); >>>>>>>> mainForm.setScrollable(false); >>>>>>>> >>>>>>>> I see also >>>>>>>> Exception in thread "AWT-EventQueue-0" Failed to get location on >>>>>>>> screen:component must be showing on the screen to determine its >>>>>>>> location >>>>>>>> in the console after the execution of the method. >>>>>>>> >>>>>>>> Il giorno mercoledì 30 settembre 2020 alle 05:23:37 UTC+2 Shai >>>>>>>> Almog ha scritto: >>>>>>>> >>>>>>>>> It's hard to tell from the code. The "not relevant here" code >>>>>>>>> looks very suspicious though. >>>>>>>>> >>>>>>>>> Did you try just stepping over this in the debugger with the >>>>>>>>> simulator? >>>>>>>>> I assume you reproduced it there so just step over the lines and >>>>>>>>> see what's going on. Are the components physically added but not >>>>>>>>> visible? >>>>>>>>> Are they added to the wrong location or not sized correctly? >>>>>>>>> >>>>>>>>> On Tuesday, September 29, 2020 at 12:07:50 PM UTC+3 P5music wrote: >>>>>>>>> >>>>>>>>>> My codename app has master/detail layout. >>>>>>>>>> A TableLayout is used for that, in landscape mode. >>>>>>>>>> It is used also in portrait mode with different proportions. >>>>>>>>>> >>>>>>>>>> If the app starts in landscape mode, the master and the detail >>>>>>>>>> are visible, and subsequent orientation changes are handled >>>>>>>>>> correctly and >>>>>>>>>> the user interface is succesfully reconstructed. >>>>>>>>>> >>>>>>>>>> If the app starts in portrait mode, only the master is visible by >>>>>>>>>> design (that's OK) but after the orientation change the user >>>>>>>>>> interface is >>>>>>>>>> not reconstructed completely >>>>>>>>>> because >>>>>>>>>> the master is just at full size, while the detail is not >>>>>>>>>> reconstructed. >>>>>>>>>> >>>>>>>>>> This is the code of a method that is called at startup and when >>>>>>>>>> orientation changes: >>>>>>>>>> >>>>>>>>>> private void setContainers() >>>>>>>>>> { >>>>>>>>>> mainEditingContainer.remove(); >>>>>>>>>> >>>>>>>>>> //these lines are to handle fab correctly >>>>>>>>>> if (fabBoundContainer!=null) fabBoundContainer.remove(); >>>>>>>>>> if (fabFirstTime) >>>>>>>>>> {fabBoundContainer=fab.bindFabToContainer(itemListContainer);} >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> //mainForm.setLayout(BoxLayout.x()); not useful to reset the >>>>>>>>>> TableLayout >>>>>>>>>> >>>>>>>>>> //the issue is present also without these revalidations >>>>>>>>>> mainEditingContainer.revalidate(); >>>>>>>>>> editingContainer.revalidate(); >>>>>>>>>> fabBoundContainer.revalidate(); >>>>>>>>>> mainForm.revalidate(); >>>>>>>>>> >>>>>>>>>> if (isPortrait() && conditions) //not relevant here >>>>>>>>>> { >>>>>>>>>> new >>>>>>>>>> EditingForm(appData,myData,mainForm,editingContainer,other >>>>>>>>>> parameters).show(); >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> if (isPortrait() && !(conditions)) { // only the master in >>>>>>>>>> this mode >>>>>>>>>> //tl=new TableLayout(1,2); not useful >>>>>>>>>> //mainForm.setLayout(tl); not useful >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int) >>>>>>>>>> >>>>>>>>>> (1 * 100)), fabBoundContainer); >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> if(isTablet() && !isPortrait() ) { //master-detail in >>>>>>>>>> landscape mode >>>>>>>>>> //tl=new TableLayout(1,2); not useful >>>>>>>>>> //mainForm.setLayout(tl); not useful >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> mainForm.add(tl.createConstraint().heightPercentage(100).widthPercentage((int) >>>>>>>>>> >>>>>>>>>> (leftContainerRatio * 100)), >>>>>>>>>> fabBoundContainer).add(mainEditingContainer); >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> mainEditingContainer.revalidate(); >>>>>>>>>> editingContainer.revalidate(); >>>>>>>>>> fabBoundContainer.revalidate(); >>>>>>>>>> mainForm.revalidate(); >>>>>>>>>> >>>>>>>>>> if (fabFirstTime) fabFirstTime=false; >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> Some commented lines are with some tentative workaround but not >>>>>>>>>> successful. >>>>>>>>>> >>>>>>>>>> What's wrong? How can I achieve the complete reconstruction of UI >>>>>>>>>> in landscape mode, when the app is started in portrait and then >>>>>>>>>> rotates? >>>>>>>>>> I remind you that if the app starts in landscape mode, there are >>>>>>>>>> no issues at any subsequent device rotation (just a BrowserComponent >>>>>>>>>> is not >>>>>>>>>> resizing, this will be addressed separately). >>>>>>>>>> Thanks in avance >>>>>>>>>> >>>>>>>>>> -- You received this message because you are subscribed to the Google Groups "CodenameOne Discussions" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/codenameone-discussions/6788165a-1d5c-479e-9ed0-76814c044240n%40googlegroups.com.
