Android Question Scale TabHost

dibesw

Active Member
Licensed User
Longtime User
HI,
I have problems with scale TabHost.
I drew a layout into tab of TabHost.
This istruction I seems that not scale that is inside of TabHost.

B4X:
Scale.ScaleAll(Activity, True)

is that so?
Thanks
 
Last edited:

dibesw

Active Member
Licensed User
Longtime User
Thank you Erel, I tried to do this

B4X:
Sub Activity_Create(FirstTime As Boolean)
  Activity.LoadLayout("inscliente")
  TabHost1.AddTab("Accesso","page1")
  TabHost1.AddTab("Studio","page2")
  TabHost1.AddTab("Immagini","page3")
  TabHost1.AddTab("Pagamento","page4")
  Scale.ScaleAll(Activity, True)
End Sub

so is scaled only TabHost but not page1,2,3,4.
Where am I wrong?
 
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
Non sbagli; il punto è che Scale con TabHost non funziona bene.

Prova a mettere le view di ogni Tab in un array o list O MAP di pannelli e scalare quelli.


I think the Scale module does not work well with the TabHost (fault of the TabHost, not of the module)

You could try to use an array or a list OR A MAP of panels, one for each tab and scale them.
 
Upvote 0

klaus

Expert
Licensed User
Longtime User
If I remember well TabHost layouts are only known by the OS when the page is displayed.
Unfortunately I couldn't find the post where Erel spoke about it.
Before using Scale.ScaleAll(Activity, True) try to display all pages in a loop.
 
Upvote 0

dibesw

Active Member
Licensed User
Longtime User
Non sbagli; il punto è che Scale con TabHost non funziona bene.

Prova a mettere le view di ogni Tab in un array o list O MAP di pannelli e scalare quelli.


I think the Scale module does not work well with the TabHost (fault of the TabHost, not of the module)

You could try to use an array or a list OR A MAP of panels, one for each tab and scale them.
Grazie Luca,
spiegami meglio:
come faccio a mettere le 4 pagine in un array?
Devo rinunciare al TabHost (cioè creare 4 layout)?
 
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
No, crei un array o list o map (io adoro le map!)

private mapPanels as map
mapPanels.ini...
mapPanels.put(1, panel1) ' chiaramente dovrai dichiarare anche i panel
mapPanels.put(2, panel2)

poi "scorri" i tab
for i = 0 to mytabhost.tabcount - 1
mytabhost.currentTab = i

mytabhost.AddTab2("yourTitle", mapPanels.Get(i))
next

piu' o meno, è chiaro che non l'ho provato.

Il contenuto dei panel puoi anche crearlo nel designer.

(nota che io non ho mai usato i tabhost, vado a "occhio" :))

P.S. uhm credo sia sbagliato.
Forse non serve il ciclo, basta aggiungere i tabhost.
 
Upvote 0

dibesw

Active Member
Licensed User
Longtime User
Provo...
No, crei un array o list o map (io adoro le map!)

private mapPanels as map
mapPanels.ini...
mapPanels.put(1, panel1) ' chiaramente dovrai dichiarare anche i panel
mapPanels.put(2, panel2)

poi "scorri" i tab
for i = 0 to mytabhost.tabcount - 1
mytabhost.currentTab = i

mytabhost.AddTab2("yourTitle", mapPanels.Get(i))
next

piu' o meno, è chiaro che non l'ho provato.

Il contenuto dei panel puoi anche crearlo nel designer.

(nota che io non ho mai usato i tabhost, vado a "occhio" :))

P.S. uhm credo sia sbagliato.
Forse non serve il ciclo, basta aggiungere i tabhost.
Provo...grazie
 
Upvote 0

dibesw

Active Member
Licensed User
Longtime User
No, crei un array o list o map (io adoro le map!)

private mapPanels as map
mapPanels.ini...
mapPanels.put(1, panel1) ' chiaramente dovrai dichiarare anche i panel
mapPanels.put(2, panel2)

poi "scorri" i tab
for i = 0 to mytabhost.tabcount - 1
mytabhost.currentTab = i

mytabhost.AddTab2("yourTitle", mapPanels.Get(i))
next

piu' o meno, è chiaro che non l'ho provato.

Il contenuto dei panel puoi anche crearlo nel designer.

(nota che io non ho mai usato i tabhost, vado a "occhio" :))

P.S. uhm credo sia sbagliato.
Forse non serve il ciclo, basta aggiungere i tabhost.
Scusa Luca,
ho provato così
B4X:
  Private mapPanels As Map
  mapPanels.Initialize
  mapPanels.put(1, "page1")
  mapPanels.put(2, "page2")
  mapPanels.put(3, "page3")
  mapPanels.put(4, "page4")

  Scale.ScaleView(mapPanels.Get(1))
  Scale.ScaleView(mapPanels.Get(2))
  Scale.ScaleView(mapPanels.Get(3))
  Scale.ScaleView(mapPanels.Get(4))

  TabHost1.AddTab("Accesso","page1")
  TabHost1.AddTab("Studio","page2")
  TabHost1.AddTab("Immagini","page3")
  TabHost1.AddTab("Pagamento","page4")
page1,2,3,4 sono dei layout
Non ho capito esattamente come e dove devono essere scalate le pagine.
La istruzioni Scale.ScaleView danno errore in esecuzione; se le tolgo comunque non viene scalato nulla.
Sto diventando matto.
 
Last edited:
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
Oh, non ci sono riuscito!

Allora... a meno che tu non trovi il modo, per il momento ti consiglio di utilizzare 4 label in fila orizzontale che facciano da etichette delle tab (magari dentro ad un panel trasparente) e, sotto queste, puoi mettere: o un pannello unico, che carichi con il layout adatto a seconda del click sulle label, oppure 4 panel, di cui uno solo visibile, con i layout già caricati.

Di tutto questo, tenterò di fare una custom view, in modo da sostituire 'st'antipatica TabHost! ;)
 
Upvote 0

dibesw

Active Member
Licensed User
Longtime User
A questo punto, visto che il target degli smathphone è infinito, il TabHost non ha proprio senso utilizzarlo.
La tua proposta è quella più ovvia, ma pensavo ci fosse una speranza per il TabHost.
Comunque grazie e una ultima domanda:
per adattare tutti layout a qualsiasi tipo di telefono è corretto creare tutti i layout possibili?

dpi.jpg


...per poi, per ogni layout, adattare le varie view nel Designer Script?

dpi1.jpg

Grazie.
 
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
No, altrimenti impazzisci :)

Dovresti creare solo due layout, uno per il portrait e uno per il landscape, poi scalare il layout, tramite lo script Designer o... con il modulo Scale!

Questo è molto più semplice ma ha uno svantaggio: nei dispositivi con dimensioni maggiori, il tutto è più "sgranato".

Probabilmente, la cosa migliore sarebbe quella di fare come sopra, ma partendo da due variant che non siano 320x480 e 480x320, ma di dimensioni maggiori.

[Siamo sempre nel forum Questions, non nel forum italiano! Dovremmo scrivere in inglese!
This is the Questions Forum: we should write in English!]
 
Upvote 0

klaus

Expert
Licensed User
Longtime User
What exactly did you do and how ?
What exactly do you want ?
Could you post your project as a zip file or at least a smaller one showing the problem.
In post #14 you show several layout variants, do you already use them ?
I also see that you have AutoScaleAll active in the Designer.
When you use the Scale module you should not use AutoScaleAll.
The Scale module is based on the 'standard' screen size 320 * 480 * 160.
Have you read chapter 8.11.3 AutoScale more advanced examples in the Beginner's Guide ?
With the Scale module you can also downscale from a different screen size than the 'standard' one.
Setting Scale.SetRate(1) works exactly like %x and %y scaling.
 
Upvote 0

klaus

Expert
Licensed User
Longtime User
Hi Luca.
That's what I understoud too.
And I gave the answer in post #5, I don't even know if he read it.
Then he added other information and to give a concrete advice the answers to my questions are necessary.
Depending on what he did or not did the answer would be different.
If he posted an example the answer would be easier.
 
Upvote 0

LucaMs

Expert
Licensed User
Longtime User
Hi, great Klaus :)

I think I've made every attempt with TabHost, including the cycle on each tab and the setting of CurrentTab.

As you know, I use only your module (by the way, I'm supposed to ask you one thing, because I had never tried SupportedOrientations = unspecified and I have a problem that I could solve with a little 'commitment).

I have tried adding the views through code;
by loading them from a file;
by loading them from a file contained in a panel and just trying to scale only that panel.

Nada. Nisba. Nicht. Niente. Nothing. :D

Even assuming that he has other needs, the first and basic is that you have understood and that I have written in my previous post.

I think Informatix in his "How they do ..." uses the percentages, I'd look at those posts (the fact is that I'm not very interested, since my only goal was to help :))
 
Upvote 0
Top