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/35851e40-e7b0-4595-8022-4b27f65eaba7n%40googlegroups.com.
