2011-01-20 7 views
5

Ho utilizzato l'unità pt in file XML. Ora ho bisogno di impostare la larghezza di un elemento in fase di esecuzione. Come posso impostare la larghezza per punti in modo che sia la stessa unità che ho usato ovunque. Presumo che dovrò moltiplicare per risoluzione e dpi. Un esempio di codice sarebbe il migliore.Android: conversione di punti in pixel

+0

Vedere il mio post relativo alla conversione di punti in pixel http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html? – Dori

risposta

10

In primo luogo si dovrebbe davvero leggere il seguente articolo approfondito dal Developer Documentation Android:

http://developer.android.com/guide/practices/screens_support.html

Proprio nel mezzo si trova il sotto il titolo:

Non utilizzare valori di pixel codificati nel codice

// Convert the dps to pixels 
final float scale = getContext().getResources().getDisplayMetrics().density; 
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f); 
+1

Perché c'è un "+ 0.5f" nella seconda riga? Numero magico nell'esempio o è necessario convertire correttamente i pixel in dp? – C0deAttack

+3

Arrotonda all'intero più vicino quando l'espressione viene convertita in numero intero. – Blrfl

+0

Blrfl è giusto questo arrotonda al numero intero più vicino. – Yahel

1

È possibile utilizzare dip invece di pt

+1

Sto usando pt invece di dip perché ha più senso per i non programmatori. Se qualcuno chiede quanto è grande posso dire 12 punti e possono sapere di cosa si tratta. Se dico pixel allora potrebbero non rendersi conto che i pixel di Android sono molto più piccoli di quelli su PC e se dico tuffi, allora si troveranno di fronte a una nuova parola. Tutto a parte. Posso usare dip in runtime? Posso convertire pt in dip? –

+0

Per quanto riguarda il tuo dip in questione runtime. Sì, puoi, ma devi convertire i pixel in DP moltiplicando i pixel con il fattore di scala degli schermi che puoi ottenere con context(). GetResources(). GetDisplayMetrics(). Density. – C0deAttack

Problemi correlati