Italian b4a - Come calcolo la corretta height dentro a un TabHost ?

per8

Member
Licensed User
Ciao a tutti, sono un nuovissimo utente di B4a. (l'ho acquistato da 2 gg dopo aver provato abbastanza a foto la demo)

Sto realizzando un'app di test per gestire un db ..
Ho letto in questi giorni parecchia documentazione su B4a (vengo dallo sviluppo in VB6 e .NET) ma ancora non mi è ben chiaro il funzionamento dei metodi per eseguire il resize degli oggetti rispetto ai loro container.
Ho provato a cercare e ricercare nel forum in inglese ma non sono riuscito a trovare/capire come risolvere questo problema ...

Nel pratico in una TabHost con due tab inserisco due Layout (.bal) .. riesco, utilizzando i vari top, left, 100%x e width a riposizionare bene gli oggetti tranne che per il calcolo della height dentro al tabhost appunto.

Per quanto ci abbia provato il pulsante che voglio mettere in foando a uno dei layout (es btn.with = 100%y - btn.height) gli oggetti mi finiscono sempre un po fuori dall'area visiva.

Questo mi succede sui telefoni mentre su un tab Samsung tutti si vede bene.

Per posizionare gli oggetti dentro ai layout pensavo (come faccio in vb6) di usare la dimensione del contenitore per i suoi oggetti all'interno e via così invece non ci riesco.

Non riesco a capire come gestire le dimensioni dentro al tabhost ..

Qualcuno può spiegarmi un attimo come funziona ??
Scusate la lunghezza e (forse) la poca chiarezza del messaggio .. ^_^

grazie a tutti.
 

LordZenzo

Well-Known Member
Licensed User
non capisco perche non ci riesci, conoscendo le dimensioni del "contenitore" e del "contenuto" dovresti poter ben posizionare il tutto
comunque io faccio cosi
creo un layount ben dimensionato e poi al evento Activity_Create faccio partire questa routine
B4X:
Sub Resize
    Dim X,Y As Float  
    x=(100%x/1600)
    y=(100%y/2420)
    For Each v As View In Activity.GetAllViewsRecursive
        v.Height=(v.Height*y)
        v.Width=(v.Width *x)
        v.Left=(v.Left *x)
        v.Top=(v.Top *y)      
    Next  
End Sub
purtroppo non funziona con le dimensioni dei caratteri di label e text
 

per8

Member
Licensed User
Metto bocca, pur non conoscendo bene TabHost (odiato fin dall'inizio, per varie limitazioni).

Anzi, proprio per questo, ti consiglierei di usare TabStripViewPager.
Ciao, ho provato a scaricare la libreria e l'esempio ma quando l'avvio mi da un errore: Cannot find: C:\Program Files (x86)\Anywhere Software\Basic4android\libraries\android-support-v4.jar

come posso risolvere il problema ?
grazie e buona giornata.
non capisco perche non ci riesci, conoscendo le dimensioni del "contenitore" e del "contenuto" dovresti poter ben posizionare il tutto
comunque io faccio cosi
creo un layount ben dimensionato e poi al evento Activity_Create faccio partire questa routine
B4X:
Sub Resize
    Dim X,Y As Float 
    x=(100%x/1600)
    y=(100%y/2420)
    For Each v As View In Activity.GetAllViewsRecursive
        v.Height=(v.Height*y)
        v.Width=(v.Width *x)
        v.Left=(v.Left *x)
        v.Top=(v.Top *y)     
    Next 
End Sub
purtroppo non funziona con le dimensioni dei caratteri di label e text
Ciao, grazie per la risposta.
Ho provato a inserire la tua Sub e ad eseguirla nell'activity_create ma mi torna errore il compilatore:

** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
main_resize (java line: 404)
java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams cannot be cast to anywheresoftware.b4a.BALayout$LayoutParams
at anywheresoftware.b4a.objects.ViewWrapper.getLeft(ViewWrapper.java:150)
at b4a.example.main._resize(main.java:404)
at b4a.example.main._activity_create(main.java:340)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at b4a.example.main.afterFirstLayout(main.java:102)
at b4a.example.main.access$000(main.java:17)
at b4a.example.main$WaitForLayout.run(main.java:80)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
 

per8

Member
Licensed User
Metto bocca, pur non conoscendo bene TabHost (odiato fin dall'inizio, per varie limitazioni).

Anzi, proprio per questo, ti consiglierei di usare TabStripViewPager.
Grazie per l'info!
Effettivamente l'ho provato e da degli ottimi risultati (più che altro senza fare nulla di più mi sono spariti i problemi di resize che avevo per l'oggetto posizionato nel fondo del layout.
Ho notato però che è molto pesante.. l'apk compilato mi è passato da circa 160kb a 680 ...
Tu usi sempre questo o hai altri componenti da suggerirmi in alternativa?
Mi sto rendendo conto che ce ne sono una marea ^_^
 

LucaMs

Expert
Licensed User
Tu usi sempre questo o hai altri componenti da suggerirmi in alternativa?
Non ho usato né l'uno né l'altro, finora :), ho solo dato un'occhiata.

Però quel TabStripViewPager mi sembra talmente ben fatto e comodo che, anche se pesa di più, utilizzerei quello.
 

per8

Member
Licensed User
Non ho usato né l'uno né l'altro, finora :), ho solo dato un'occhiata.

Però quel TabStripViewPager mi sembra talmente ben fatto e comodo che, anche se pesa di più, utilizzerei quello.
perfetto ! grazie ancora per le info. ;)
 
Top