2010-12-10 11 views
6

Sto avendo un vero problema con i miei drawable che non riesco proprio a capire.Dimensioni di schermi multipli Android e problemi di densità

Il problema è questo:

Ci sono schermi di dimensioni di circa 320x480, 480x800, 480x854

Poi vi sono più comunemente densità di 1,0 (160) e 1,5 (240)

Ora, su un Droid, la dimensione dello schermo è 480x800 e la densità sta riportando utilizzando DisplayMetrics come 1,5

sul G1, è 320x480 e riferire ad una densità di 1,0

012.351.

MA tablet dispositivi stanno segnalando indietro a 480x800 con una densità di 1,0 (160)

Così, sto impazzendo perché posso mettere 320x480 immagini nella cartella drawable-MDPI e 480x800 le immagini nella cartella drawable-hdpi , ma su computer Tablet, indipendentemente dal fatto che non ridimensionino nulla a schermo intero.

Qualsiasi aiuto sarebbe molto apprezzato. Voglio solo che tutte le mie immagini 320x480 si scalino indipendentemente dal dispositivo.

+0

Io non sono preoccupato per la distorsione a causa della natura delle immagini, il mio problema è che non sempre scala. Su un G1, non scala affatto e questo va bene. Su un Droid, si scalano perché la densità è riportata correttamente (240), ma su un Galaxy Tab, le immagini sono tutte piccole e nell'angolo in alto a sinistra dello schermo perché riporta 480px di larghezza, ma la densità è ancora 160 - o almeno riportando in questo modo. –

risposta

0

Per ridimensionare le immagini senza distorsione o pixelizzazione, Android utilizza immagini chiamate 9-patch. Per saperne di più su di loro qui:

http://developer.android.com/guide/developing/tools/draw9patch.html

Ma questo è più o meno utili a seconda di come si sceglie di utilizzare le immagini. Il 9 strumento patch non sarebbe utile per esempio, un'applicazione per carta da parati, ad esempio.

Ecco un altro link che ho trovato su SO:

http://www.developer.com/ws/other/article.php/3889086

1

Come stai applicando le immagini? Puoi semplicemente usare fill_parent per layout_width/height di ImageView e selezionare fitCenter per scaleType.

è perfettamente corretto per il Galaxy Tab da segnalando come mezzo dpi (anche se ho pensato la risoluzione della scheda erano 1024 x 600?), Anche se si tratta di una risoluzione elevata . Il dpi è una misura della dimensione dei pixel (ad esempio il numero di pixel in un pollice). Quindi una risoluzione di 480 x 800 in uno schermo da 4 "avrà una risoluzione più alta di una risoluzione di 480 x 800 in un display da 7", semplicemente perché sono compressi in uno spazio più piccolo.

Si può effettivamente aggiungere una cartella drawable aggiuntivo chiamato drawable-large-mdpi che potrebbero contenere file di un dispositivo di grandi dimensioni medio dpi proiettato, come ad esempio la scheda (vedi here per ulteriori informazioni su queste qualificazioni).

+0

Sì, ma il problema è che tutti i dispositivi non sembrano comportarsi allo stesso modo. Se ho un png 320x480 nella cartella drawable, su uno schermo G1 con 160 dpi l'immagine si adatta a tutto schermo, su un droide con uno schermo 480x800 con 240 dpi, l'immagine si adatta a tutto schermo. Ma poi all'improvviso ci sono dispositivi con schermi 480x800 e 160 dpi. Quindi se ho più di 100 immagini, il mio programma sarà ENORME se devo creare immagini per ogni risoluzione. Perché non stanno scalando per tutti i dispositivi come fanno sul Droid? –

+0

Ancora, come stai disegnando le immagini? ImageView? Sfondo? – kcoppock

+0

Sto usando drawBitmap() in onDraw() sui miei giochi. –

2

Potrebbe mancare alcuni tag nel file manifest come anyDensity e supports.... Supporto per tablet discreto fornito solo con xlarge (in Gingerbread credo).

Anche se si sta disegnando da soli, è necessario chiamare setTargetDensity(actualDensity) sulla tela, disegnabile o bitmap (non ricordo quale dei tre).

1

Il tablet sta facendo qualcosa di sbagliato.Google ha reso specificamente possibile per il produttore dell'hardware dichiarare l'hardware mpdi anche se il dpi è circa 160. Il Galaxy Tab lo fa: http://realmike.org/blog/2010/12/21/multiple-screen-sizes-with-processing-for-android/

Puoi provare ad aggiungere un res/drawable-mdpi-xlarge e aggiungere grafica hdpi qui . xlarge è stato introdotto in 2.3 Penso, e le versioni precedenti di Android non lo riconosceranno. Si potrebbe desiderare di provare drawable-MDPI-grande allora (come da http://blog.alsutton.com/2010/07/03/android-tablets-and-mdpi-large/)

Aggiungere cartelle disegnabili in più aggiunge alle dimensioni del vostro apk. In generale, i tablet prima di Gingerbread o Better Honeycomb sono difficili su Android e non mi preoccuperei di fare cose speciali per loro se puoi evitarlo.

+0

dovrebbe essere 'res/drawable-xlarge-mdpi' e non' res/drawable-mdpi-xlarge' – WarrenFaith

Problemi correlati