Italian Adattabilità dell'interfaccia

Discussion in 'Italian Forum' started by Sberla, Sep 14, 2015.

  1. Sberla

    Sberla Active Member Licensed 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.
     
  2. LucaMs

    LucaMs Expert Licensed User

    Eh, questo è un punto critico, tanto dibattuto e da me spesso contestato (anche perché a me piace rompere... le uova nel paniere, diciamo, hehehe)...
    segue...
     
  3. LucaMs

    LucaMs Expert Licensed 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
     
  4. maxware

    maxware Well-Known Member Licensed User

    Ciaooo
    io parto sempre da un pannello 480*800 e poi vado di %
     
  5. sirjo66

    sirjo66 Well-Known Member Licensed 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
     
  6. LucaMs

    LucaMs Expert Licensed User

    Ho fatto poche prove, ma sembra che faccia esattamente quanto io volevo, ovvero scalare il layout nello stesso modo in cui farei usando le percentuali.
     
  7. maxware

    maxware Well-Known Member Licensed User

    ciao raga
    Autoscale 1
    ma da che layout partire ?
     
  8. LucaMs

    LucaMs Expert Licensed 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.
     
  9. LucaMs

    LucaMs Expert Licensed 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: Sep 16, 2015
  10. LucaMs

    LucaMs Expert Licensed 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
     
  11. LucaMs

    LucaMs Expert Licensed 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: Sep 17, 2015
  12. sirjo66

    sirjo66 Well-Known Member Licensed User

    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: Sep 18, 2015
  13. LucaMs

    LucaMs Expert Licensed 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.
     
  14. luciano deri

    luciano deri Active Member Licensed 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: Sep 17, 2015
  15. LucaMs

    LucaMs Expert Licensed User

    Come dire... una soluzione decente non esiste! :mad:
     
  16. picenainformatica

    picenainformatica Active Member Licensed User

    Non esiste una soluzione unica. Il resize proporzionale mantiene l'aspetto, l'ancoraggio mantiene l'usabilità. Dipende dal risultato che si vuole raggiungere.
     
    LucaMs likes this.
  17. LucaMs

    LucaMs Expert Licensed User

    La perfezione :)
     
  18. luciano deri

    luciano deri Active Member Licensed 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.
     
  19. sirjo66

    sirjo66 Well-Known Member Licensed User

    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.

    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
     
    LucaMs likes this.
  20. luciano deri

    luciano deri Active Member Licensed User

    Last edited: Sep 17, 2015
    LucaMs likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice