Ok, now it is solved. I was calculating the ratio only at startup but after rotation it was not updated. Thank you
Il giorno sabato 10 ottobre 2020 alle 07:42:32 UTC+2 Shai Almog ha scritto: > 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/6f62812a-5539-43e5-8216-9ef9ec802a7cn%40googlegroups.com.
