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
risposta
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);
Perché c'è un "+ 0.5f" nella seconda riga? Numero magico nell'esempio o è necessario convertire correttamente i pixel in dp? – C0deAttack
Arrotonda all'intero più vicino quando l'espressione viene convertita in numero intero. – Blrfl
Blrfl è giusto questo arrotonda al numero intero più vicino. – Yahel
È possibile utilizzare dip
invece di pt
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? –
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
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