Risposte:
Dovrai convertirlo da dps in pixel usando il fattore di scala del display.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
a px
? Grazie.
So che questa è una vecchia domanda, tuttavia ho trovato un modo molto più accurato di fare questa conversione.
Giava
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
sopra è il valore DP che vuoi convertire in PX
Osservando le tue esigenze, esiste anche una soluzione alternativa. Sembra che tu conosca le dimensioni in dp al momento della compilazione, quindi puoi aggiungere una voce dimen nelle risorse. Quindi è possibile eseguire una query sulla voce dimen e verrà automaticamente convertita in pixel in questa chiamata:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
E il tuo dimens.xml avrà:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Estendendo questa idea, puoi semplicemente memorizzare il valore di 1dp o 1sp come una voce dimen e interrogare il valore e usarlo come moltiplicatore. Usando questo approccio isolerai il codice dalle cose matematiche e farai affidamento sulla libreria per eseguire i calcoli.
Il modo più semplice (e funziona anche da API 1) che è stato testato è:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
Dalle documentazioni:
Recupera una dimensione per un particolare ID risorsa da utilizzare come dimensione in pixel non elaborati. È uguale a getDimension (int), tranne per il valore restituito convertito in pixel interi da utilizzare come dimensione. Una conversione delle dimensioni comporta l'arrotondamento del valore di base e la garanzia che un valore di base diverso da zero abbia una dimensione di almeno un pixel.
Sì, arrotondando il valore ma non è molto male (solo in valori dispari su dispositivi hdpi e ldpi è necessario aggiungere un piccolo valore quando ldpi non è molto comune) Ho testato in un dispositivo xxhdpi che converte 4dp in 16 (pixel) e questo è vero.