2012-04-09 5 views
5

L'app che sto sviluppando contiene 2 layout separati: uno per i normali telefoni, l'altro per tablet di piccole dimensioni come NOOKcolor. La decisione che viene effettuata in base alla risoluzione della larghezza dello schermo (attualmente 600 dpi). Sembra fantastico su Nook ma terribile su HTC Rezound, che ha un display 720 x 1280. Su quest'ultimo, a prescindere dalla risoluzione più alta, tutto (testo, immagini, ecc.) Sembra molto più grande, quindi tutto diventa più complesso.Android - rileva un tablet piccolo o un telefono grande?

Quale sarebbe un buon approccio per scegliere il dispositivo giusto? Forse rilevare la dimensione fisica (4,3 "vs 7") rispetto alla risoluzione?

+0

V'è una maschera di bit Configuration.screenLayout - vedi qui http://stackoverflow.com/questions/5015094/define-device-screen-category-small-normal-large-xlarge-using-code – dag

risposta

4

utilizzare il seguente metodo per rilevare le dimensioni dello schermo del dispositivo:

/** 
    * Checks if the screen size is equal or above given length 
    * @param activity activity screen 
    * @param screen_size diagonal size of screen, for example 7.0 inches 
    * @return True if its equal or above, else false 
    */ 
    public static boolean checkScreenSize(Activity activity, double screen_size) 
    { 
     Display display = activity.getWindowManager().getDefaultDisplay(); 
     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     display.getMetrics(displayMetrics); 

     int width = displayMetrics.widthPixels/displayMetrics.densityDpi; 
     int height = displayMetrics.heightPixels/displayMetrics.densityDpi; 

     double screenDiagonal = Math.sqrt(width * width + height * height); 
     return (screenDiagonal >= screen_size); 
    } 
+0

Aha! La densità è la chiave qui! Grazie, questo sembra funzionare – Bostone

+0

Cosa ?? Ho inserito 7.0 come parametro di input e restituisce false per il mio Kindle Fire. –

+0

strano, perché l'ho provato sul mio dispositivo e funziona perfettamente bene. prova a registrare 'screenDiagonal' prima di * return * e guarda cosa calcola effettivamente per il tuo dispositivo – waqaslam

1

Consultare la documentazione per Supporting Multiple Screens. È possibile seguire una struttura di denominazione delle cartelle predeterminata in modo che Android carichi diversi layout e drawable per diverse dimensioni/densità dello schermo.

Ad esempio:

res/layout/my_layout.xml    // layout for normal screen size ("default") 
res/layout-small/my_layout.xml  // layout for small screen size 
res/layout-large/my_layout.xml  // layout for large screen size 
res/layout-xlarge/my_layout.xml  // layout for extra large screen size 
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation 

res/drawable-mdpi/my_icon.png  // bitmap for medium density 
res/drawable-hdpi/my_icon.png  // bitmap for high density 
res/drawable-xhdpi/my_icon.png  // bitmap for extra high density 
+0

Per pre-nido d'ape questo è in qualche modo inutile – Bostone