Let’s watch it at work first:
This may not sound super special, but it’s a biggie! There are very few frameworks out there that can do this, so I’m very proud of this one.
“Nice but that must ask for a lot of control code, no?“, I hear you ask.
Well, here it is:
gridContainer.IsResponsiveContainer = True
Just by setting gridContainer.IsResponsiveContainer = True, you just made the ABMContainer device responsive just like a page. This means you can from now on actually create controls that behave differently depending on the device you are on.
For example, setting this grid on a container, the last 5 cells will wrap differently on a phone, tablet or desktop:
gridContainer.AddRows(1,True,"").AddCells12(1,"") gridContainer.AddRows(1,True,"").AddCells12(1,"") gridContainer.AddRows(1,True,"").AddCellsOSMP(5,0,0,0,12,6,4,0,0,0,0,"")
I also added some powerful tools to adjust the layout of your WebApp according to the device you are on:
Returns the current page size (phone, tablet, desktop). You can use this method e.g. in ConnectPage to determine the state of the current page size and act accordingly.
public Sub ConnectPage() Log("Current page size: " & page.GetCurrentPageSize) ... End Sub
An event Page_SizeChanged will return the same value in the ‘current’ parameter if the user changes the window size. (It also returns the ‘previous’ state).
Note that this event is NOT raised at load time! Use Page.GetCurrentPageSize to check that.
Sub Page_SizeChanged(previous As String, current As String) Log(previous & " -> " & current) Select Case current Case "phone" gridContainer.MarginLeft = "0px" gridContainer.SetFixedWidth("100%") Case "tablet" gridContainer.MarginLeft = "210px" gridContainer.SetFixedWidth("calc(100% - 210px)") Case "desktop" gridContainer.MarginLeft = "210px" gridContainer.SetFixedWidth("calc(100% - 610px)") End Select gridContainer.Refresh End Sub
Containers on a fixed position:
Next to setting a fixed with and height of an ABMContainer, you can now also set a fixed position. This can be handy to create ‘floating’ sidebars for example.
compContainer.SetFixedPosition("0px", "", "56px", "")
Params: left, right, top,bottom
Set a parameter to empty string when you don not want to set it.
These 3 new features used together give you an immense power over how your WebApp should behave depending on the device it is running on, with very little effort.
Another year has passed:
B4X has grown to be a very powerful player in develop land. The already productive RAD IDE has received a couple of very innovative features to help you even more with your app development. Anywhere Software is always right on top of all the new stuff Android, iOS and all the other supported platforms throw at us. And being stable and reliable makes this a unique environment. The growth of the forum and the quality of the messages/responses are the real proof of this. Thanks a lot Erel for this beautiful tool. It is without a doubt the best cross-platform tool one can use for the moment!
And ABMaterial is lucky to be able to stand on the shoulders of this giant. ABM has surpassed my biggest expectations this year. It is great to see a lot of you are using it to make amazing webapps and even can make a living out of it. This was definitely the ‘year of speed‘. Very few frameworks can match ABM when it comes to develop and execution time. And there is a lot more in the pipeline for the upcoming months!
Thank you all for following my blog! You inspire me every day to push the limits of the tools and frameworks I make.
Rest me only to wish you all the very best and I hope to see you back in 2018!