Autore Topic: multi-risoluzione  (Letto 445 volte)

Offline EM95

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 10
multi-risoluzione
« il: 24 Luglio 2017, 18:13:48 CEST »
0
Ciao a tutti,
avrei bisogno di qualche consiglio per risolvere un problema di multi-risoluzione.

Sto lavorando ad un gioco 3D in android studio ed è necessario che questo si adatti perfettamente a tutti i dispositivi android.
Ho iniziato creando le varie cartelle layout ma, poiché la schermata di gioco presenta circa una ventina di immagini, mi risulta difficile e dispendioso in termini di tempo modificare le dimensioni e soprattutto la posizione di ogni singola immagine. Inoltre, così facendo, gli elementi non sono mai posizionati perfettamente se la risoluzione cambia (anche di poco).
L'ipotesi migliore sarebbe poter inserire delle dimensioni dinamiche cioè rilevare nell' activity le dimensioni dello schermo su cui viene avviata l' applicazione e successivamente trasferire l'informazione ad un unico layout che, invece di avere valori fissi, avrà una sorta di formula che calcola quindi al momento la dimensione/posizione del relativo elemento.

Purtroppo non ho trovato modo di realizzare questo, per questo chiedo se qualcuno sa dirmi come risolvere il problema o se ci sono delle vie alternative.

Graziee :-)

Offline uelfox

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet mediacom 8" MP842M
  • Sistema operativo:
    Win 7
Re:multi-risoluzione
« Risposta #1 il: 29 Novembre 2017, 08:18:16 CET »
0
Ciao, servirebbe anche a me questa soluzione.....
Hai risolto?
Come?

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 773
  • Respect: +161
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:multi-risoluzione
« Risposta #2 il: 29 Novembre 2017, 10:00:09 CET »
0
Per una risposta esaustiva servirebbero ulteriori dettagli.

In soldoni per avere la dimensione dello schermo utilizzabile si può usare:

Codice (Java): [Seleziona]
  DisplayMetrics metrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(metrics);
  int screenWidth = metrics.widthPixels;
  int screenHeight = metrics.heightPixels;
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline uelfox

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Tablet mediacom 8" MP842M
  • Sistema operativo:
    Win 7
Re:multi-risoluzione
« Risposta #3 il: 29 Novembre 2017, 10:40:38 CET »
0
Citazione
Per una risposta esaustiva servirebbero ulteriori dettagli.
Ecco il mio scenario:
la mia app deve girare su tablet che potrebbero avere dimensioni differenti.
Attualmente ho un unico layout che però se lo installo su un tablet differente da quello per cui lo fatta, la posizione e la dimensioni dei vari controlli (textview, button, imageview, ecc...) è differente.
Da quello che sto cercando di capire, in studio android, si possono impostare vari layout (large, xlarge,ecc....), giusto?
Come posso fare in modo che la mia app, utilizzi il layout adatto alla sua dimensione?

Grazie per l'interessamento.

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 773
  • Respect: +161
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:multi-risoluzione
« Risposta #4 il: 29 Novembre 2017, 11:12:46 CET »
0

Anzitutto "large", "xlarge" e compagnia bella sono deprecati, ma il concetto è lo stesso: il suffisso della cartella indica i vincoli da rispettare.

Mi spiego meglio.

Supponiamo che tu hai tre layout per smartphone (~5"), phonepad  (~7") e tablet  (~11").

- la cartella "layout" dovrà contenere i layout per gli smartphone
- la cartella "layout-sw600dp" dovrà contenere i layout per i phonepad
- la cartella "layout-sw720dp" dovrà contenere i layout per i tablet

I layout nelle tre cartelle devono avere lo stesso nome (es. "activity_main.xml").

Fatto. Il SO restituirà il layout adatto al dispositivo semplicemente accedendo a R.layout.activity_main

Più in dettaglio, "sw600dp" significa che le risorse contenute in questa cartella sono usate se la dimensione minore del dispositivo (smallest width - sw) deve essere almeno 600dp, ossia (600/160=) 3,75 pollici, 9,52 centimetri. Nota che si parla di dimensione minore, non di diagonale (che è quella usata per indicare la dimensione dello schermo). Quindi si parla di valori approssimati; purtroppo non c'è un modo semplice per selezionare il layout per un dispositivo in base alla diagonale.

Perché proprio 600dp? E' un valore empirico. Diciamo che approssimativamente gli smartphone hanno una dimensione minima inferiore a 600, i phonepad superiore. Sicuramente ci sono modelli di smartphone e phonepad che non rispettano questo vincolo, ma non c'è molto da fare in merito (e sarei molto felice di essere smentito).

Stesso discorso per 720dp (4,5 pollici): è un valore soglia al di sotto del quale abbiamo i phonepad ed al di sopra del quale abbiamo i tablet.

E quindi, se la dimensione minore (lato corto) del dispositivo è tra zero e 599dp, saranno usati i layout nella cartella "layout"
Se è tra 600 e 719 dp saranno usati i layout nella cartella "layout-sw600dp"
Se è 720 dp o più saranno usati i layout nella cartella "layout-sw720dp"

Per altri dettagli, la guida di riferimento ufficiale è questa: https://developer.android.com/guide/topics/resources/providing-resources.html
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.