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/06497b69-c95e-4424-885a-7e0fe1037732n%40googlegroups.com.

Reply via email to