Italian Adattabilità dell'interfaccia

Sberla

Active Member
Licensed User
Longtime User
Come mi consigliate di fare la mia interfaccia grafica in modo che si adatti ai vari devices?
Mi consigliate di farlo via codice, attraverso i designer script o con qualche modulo se esiste?
Grazie a tutti per le vostre eventuali risposte.
 

LucaMs

Expert
Licensed User
Longtime User
La mia idea è sempre stata quella di adattare i layout nel senso di ingrandirli / rimpiccolirli PROPORZIONATAMENTE.

Per ottenere questo, usavo il modulo Scale di Klaus; però poi qualche adattamento manuale dovevo comunque farlo.

Poi ho pensato di usare le percentuali: se il layout che creo è di altezza 480 con densità - o scale - 1 ed il dispositivo ha altezza doppia, 960, se ho un button alto 50dip nel layout, scalandolo tramite percentuali sul dispositivo alto il doppio dovrà essere alto 100dip (a parità di densità, altrimenti si utilizza anche questo dato).

In alcuni casi (ho dimostrato questo pubblicando due screenshot di uno stesso gioco su due dispositivi) molti fanno così e il risultato è decente.
Direi che in questo caso, si dovrà realizzare un layout di base che sia di grandezza media, non un 320x200 né un 1920x1024 - se esiste, boh.

Attualmente sto ottenendo lo stesso "effetto" semplicemente settando AutoScaleRate(1) prima di AutoScaleAll nello script generale del layout (nel Designer, quindi).

L'ideale sarebbe utilizzare layout differenti per dispositivi superiori ai 6/7 pollici rispetto a quelli inferiori; ovvero proprio due "disegni" diversi e quasi due app diverse.
Se hai una lista di nomi, selezionandone uno devi aprire una "form" di inserimento/aggiornamento dei dati di quella persona, su uno smartphone dovresti usare due pannelli, uno per la lista e uno per il "form modulo di immissione", mentre sui tablet, potresti avere entrambi visualizzati in Landscape, affiancati.

Il resto lo lascio scrivere ad altri... almeno per il momento, dato che sono logorroico :D
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Io di solito preparo due layout, quello standard (480 x 320 scale = 1 (160 dpi)) che va bene per la maggior parte dei telefonini, e uno 960 x 600 scale =1 (160 dpi) per i tablet.
Poi lascio che AutoScaleAll faccia il resto

Ma voglio provare anche a mettere AutoScaleRate(1) come suggerito da Luca e vedere l'effetto che fa, sinceramente anche io su questo argomento ci capisco poco

Sergio
 

LucaMs

Expert
Licensed User
Longtime User
Io penso da uno medio e uso quello del mio smartphone, 800x480.

Però mi sembra una buona idea quella di @sirjo66 : ne crei due, uno a bassa risoluzione e uno ad alta e nel momento in cui devi caricare il layout (che sarà comunque già scalato) selezioni quello più adatto in base alla risoluzione del dispositivo.
 

LucaMs

Expert
Licensed User
Longtime User
Però un problema c'è ed è per questo, suppongo, che Erel sconsiglia sia di usare l'AutoScaleRate(1) che di usare le percentuali.

Mettiamo che imposti l'Activity (o tutta l'app) per essere utilizzata in soltanto Landscape.

Parti da 800x480; il rapporto tra base e altezza, in questo caso, è 1,6 (6 periodico).
[per il momento non consideriamo la densità di pixel]
Sia usando le percentuali che impostando AutoScaleRate(1) (dovrebbe essere la stessa cosa), puoi ovviamente installare la tua app su dispositivi che abbiano non solo risoluzione diversa ma che abbiano anche quel rapporto molto diverso.

Caso %: ho un button alto 50dip e largo 100dip nel layout alto 480: in % sarà: 50/480 = 10,416%, 100/800 = 12.5%.
Se lo carichi su un dispositivo che ha 600x480 (magari non esiste, ma è un esempio) ovvero stessa altezza ma larghezza inferiore,
il button diventerà: 50x75, con un rapporto base altezza = 1.5.

Insomma, se questo rapporto di layout differisce molto da quello del dispositivo, ti ritrovi con le view distorte.
Inoltre, metti che questi button siano incolonnati verticalmente, potranno essere sovrapposti o troppo distanziati tra loro, rispetto al layout originale.


Penserocci meglio (fate altrettanto, grazie :))
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
E' evidente che, nel caso di cui sopra, se il tasto in partenza è 100x50 e nel dispositivo diventa 75x50, in questo si avvicina ad essere più un quadrato che un rettangolo:

upload_2015-9-16_20-45-4.png


upload_2015-9-16_20-45-24.png
 

LucaMs

Expert
Licensed User
Longtime User
Questa sarebbe la soluzione secondo Erel.

MA NOTATE QUELLA POVERA EDITTEXT1 IN ALTO AL CENTRO CHE FINE FA, SOPRATTUTTO NEL FINALE DEL VIDEO.

Non rimane la benché minima proporzione tra le tre view in alto (i due tasti e la EditText).
Probabilmente egli suppone che, essendo quelli dei tasti, dovrebbero avere dimensioni pressoché costanti, mentre la edittext può essere più "flessibile". Questo non è del tutto sbagliato, anzi.

Inoltre, la cosa funziona decentemente perché i tasti si trovano negli angoli e li ha ancorati in base a questo fatto, ma se si trovassero in prossimità del centro, voglio vedere come li ancorerebbe e che fine farebbero!


[EDIT: ho aggiunto un post a quel thread di Erel, perché la sua soluzione, gli anchor, hanno dei limiti: non è possibile NON impostarli (in VB.Net tu puoi impostarli al valore NONE). Inoltre, mancano due impostazioni presenti invece in VB.Net, ovvero MaximumSize e MinimumSize
(Manca anche la possibiltà di modificare queste proprietà tramite codice, soprattutto servirebbe per le view aggiunte tramite codice, ma direi che l'assenza delle prime tre impostazioni sia più "grave"]
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
mi sembra una buona idea quella di @sirjo66 : ne crei due, uno a bassa risoluzione e uno ad alta e nel momento in cui devi caricare il layout selezioni quello più adatto in base alla risoluzione del dispositivo.

Non serve selezionare quello più adatto, Android fà tutto da solo !!!
La variante viene infatti creata dentro allo stesso layout (non dovete fare 2 layout ma un solo layout con due varianti) e viene automaticamente caricata quella corretta

Sergio
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Uhm... seguro?

Non fa questo solo in caso di due variant nello stesso layout se questi sono uno Landscape e l'altro Portrait?

Cmq, ho fatto un provoletta, creando due layout distinti e selezionando da codice quello più adatto alle dimensioni del dispositivo e già questo è un miglioramento.
Il fatto della differenza di rapporti tra base e altezza ovviamente rimane.
 

luciano deri

Active Member
Licensed User
Longtime User
Non vedo una soluzione ottimale per tutti i casi, in generale creare più variant è una noia, ogni volta che aggiungi un campo devi modificare tutti i variant per posizionalo. Ancora peggio nel caso due layout. Tuttavia la complicazione più grossa c'è nel passaggio da orizzontale a verticale. Bloccando la app a una delle due direzioni, ho creato un unico layout e un unico script partendo da 320*480 ( o vieversa in base all'orientamento), nello script lascio sempre un AutoscaleAll e metto le percentuali su quasi tutto il resto con posizionamenti legati al right o button tra i campi. Il risultato è buono per tutto.
Quando ho tanti View ho usato un layout principale con uno scrollview su cui applico quello che realmente contiene i vari View in modo da dovermi preoccupare solo del dimensionamento su l'asse orizzontale.
 
Last edited:

picenainformatica

Active Member
Licensed User
Longtime User
Non esiste una soluzione unica. Il resize proporzionale mantiene l'aspetto, l'ancoraggio mantiene l'usabilità. Dipende dal risultato che si vuole raggiungere.
 

luciano deri

Active Member
Licensed User
Longtime User
Ultima considerazione: negli script non indicare l'altezza percentuale delle label e degli edit text, il dimensionamento tramite l'autoscale adatta anche il font, altrimenti il font resta piccolo e cambia solo l'altezza del view.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Uhm... seguro?
Non fa questo solo in caso di due variant nello stesso layout se questi sono uno Landscape e l'altro Portrait?

Seguro seguro !!
Io ho una app bloccata a landscape e quindi ho fatto un layout con due varianti, tutte e due landscape, e il programma sceglie da solo quale mostrare.
Sul telefono mi mostra una variante, sul tablet me ne mostra un altra.

il dimensionamento tramite l'autoscale adatta anche il font

Ma intendi AutoScaleAll ??
Io ho dovuto dimensionare il font piccolo perchè sennò sul telefonino non ci stava, e quando funziona sul tablet il font si vede piccolo, non mi sembra proprio che il font venga ridimensionato, ma credo sia una caratteristica del OS, infatti ho dei programmi (ad esempio il famoso Clean Master) che sul telefono piccolo si vede bene, mentre sul tablet il font non viene ingrandito e si vedono le scritte piccole.

Sergio
 

luciano deri

Active Member
Licensed User
Longtime User
Top