Italian [risolto] Activity Layout

LordZenzo

Well-Known Member
Licensed User
Longtime User
un saluto al forum
io carico il layount con Activity.LoadLayout("finestra1")
e tutto va bene
per la finestra ho 3 variants in base a 3 risoluzioni dello schermo che vengono caricate bene,
ma...
se voglio sapere da codice quale delle tre e' stata caricata come faccio?
pensavo di usare le dimensioni (width o height) della activity ma ritorna sempre le stesse
c'e' un getviewers(index) e un NumberOfViews ma nulla che mi dice quale usa
ho provato a cercare ma ci sono cosi tanti post che mi sono perso....
 

LucaMs

Expert
Licensed User
Longtime User
Normalmente ti potrebbe interessare soltanto quali siano le caratteristiche dello schermo del dispositivo sul quale l'app è installata, per aggiungere View da codice:
per quale motivo hai bisogno di sapere quale variant è stato caricato?
 
D

Deleted member 103

Guest
per la finestra ho 3 variants in base a 3 risoluzioni dello schermo che vengono caricate bene,
ma...
se voglio sapere da codice quale delle tre e' stata caricata come faccio?
Scusa, ma se carichi le 3 varianti in base allo schermo, devi sapere pure quale variante hai caricato, o no?
 

LucaMs

Expert
Licensed User
Longtime User
per modificare le dimensioni dei caratteri e per riposizionare alcune icone e pulsanti
per i caratteri, come sempre, è un po' un casino!
Prova ad usare le formule di Klaus nel suo modulo Scale (in base alle dimensioni dello screen che ottieni con 100%x e 100%y).

Per la posizione delle view... o usi gli ancoraggi o, se non è sufficiente, dovrai calcolarti un po' di percentuali.
 

LucaMs

Expert
Licensed User
Longtime User
Scusa, ma se carichi le 3 varianti in base allo schermo, devi sapere pure quale variante hai caricato, o no?

A volte si confonde il concetto di layout e di variant.
Puoi scegliere di caricare un layout a runtime (e quindi sai qual'è) ma i variant fanno parte del layout e vengono scelti dal sistema tra quelli più adatti che trova nel layout.
 

luciano deri

Active Member
Licensed User
Longtime User
Suggerimento non provato:
B4X:
Codice
Sub DeterminaLayout
    Dim lv As LayoutValues
lv = GetDeviceLayoutValues
Dim screensize As Double
screensize = lv.ApproximateScreenSize
Log (screensize)
Select True
    Case screensize <= 4
        LayLoad = 1
    Case screensize > 4 And screensize <= 7
        LayLoad = 2     
    Case screensize > 7 And screensize <= 10
        LayLoad = 3     
    Case screensize > 10
        LayLoad = 4             
End Select
Ci sarà una corrispondenza tra LayLoad e il variant?
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
per i caratteri, come sempre, è un po' un casino!
Prova ad usare le formule di Klaus nel suo modulo Scale (in base alle dimensioni dello screen che ottieni con 100%x e 100%y).

Per la posizione delle view... o usi gli ancoraggi o, se non è sufficiente, dovrai calcolarti un po' di percentuali.

infatti, ma non solo per i testi, ad esempio se uso le percentuali per le dimensioni su alcuni dispositivi viene un cerchio in altri viene un ovale perché non tutti hanno lo stesso formato, e se forzi l'ovale ad essere cerchio magari si sovrappongono... insomma e' sempre un casino...
gli ancoraggi vanno bene se devi fermarli ad un bordo altrimenti no
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
Suggerimento non provato:
B4X:
Codice
Sub DeterminaLayout
    Dim lv As LayoutValues
lv = GetDeviceLayoutValues
Dim screen...cut
Ci sarà una corrispondenza tra LayLoad e il variant?

non conoscevo GetDeviceLayoutValues e cercandolo nel "Beginners Guide.pdf" c'e' un esempio di come fare quello che cerco
e pensare che lo letto "quasi" tutto
 

LordZenzo

Well-Known Member
Licensed User
Longtime User
aggiorno
ho scritto questo codice
B4X:
    y=(100%y/800)
    x=(100%x/1280)

    'For Each n As Label In Labe
    '        n.TextSize=te
       'Next
    For i=0 To 11
        Labe(i).Top=y*140
        Labe(i).left=(x*220)+i*120
        Labe(i).Width=55*x
        Labe(i).Height =90*y
    Next
sul tablet mi allinea tutto bene e i valori di x e y sono entrambi 2
sul telefono sbaglia le posizioni orizzontali e i valori di x=1 e Y=0.9
ma sullo schermo sembra che y sia 2 ossia vengono spaziati del doppio rispetto al tablet uscendo fuori schermo

EDIT
ho preso una cantonata a scrivere il codice, non ho tenuto conto delle cambiate dimensioni delle label
ecco il nuovo
B4X:
    y=(100%y/800)
    x=(100%x/1280)
    If x<y Then y=x Else x=y
    te1=(TeDi-1)*y
    te2=(TeDi+2.5)*y
    te3=(TeDi+3.5)*y
    For i=0 To 30
        H=90*y
        W=55*x
        Select i
            Case 0,1,2,3,4,5,6,7,8,9,10, 11
                T=140*y
                L=(x*220)+(i*(W+(10*x)))
            Case 12,13,14,15,16,17,18,19,20,21
                T=140*y+(H+(15*y))
                L=(x*220)+((i-12)*(W+(10*x)))
            Case 22,23,24,25,26,27,28,29, 30       
                T=140*y+((H+(15*y))*2)
                L=(x*220)+((i-22)*(W+(10*x)))
        End Select
        Labe(i).Top=T
        Labe(i).Left=L
        Labe(i).Width=W
        Labe(i).Height=H
        Labe(i).textsize=te1
    Next
che funziona
 
Last edited:

LordZenzo

Well-Known Member
Licensed User
Longtime User
torno, su questo post...
il tutto funziona ma.... se viene definita la dimensione dei caratteri da impostazioni di android ad esempio in "grande" invece che "normale" le mie scritte escono dalle label, come faccio a sapere come e' questa impostazione di sistema?
 
Top