Risposte:
Direttamente al codice
int padding_in_dp = 6; // 6 dps
final float scale = getResources().getDisplayMetrics().density;
int padding_in_px = (int) (padding_in_dp * scale + 0.5f);
getResources()sia una funzione ereditata da un'attività, ma sto cercando di utilizzare queste righe in un adattatore listview personalizzato. C'è un modo per farlo se non posso chiamare getResources()?
Se definisci la dimensione (in dp o qualsiasi altra cosa) in un file XML (che è comunque meglio, almeno nella maggior parte dei casi), puoi ottenerne il valore in pixel usando questo codice:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
C'è un modo migliore per convertire il valore in dp a livello di codice:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Quindi applica dpValueal tuo metodo, ad esempio:setPadding(dpValue,dpValue,dpValue,dpValue);
Puoi calcolare i pixel per un valore DPI specifico: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Ho lo stesso problema. L'unica soluzione che ho trovato (non ti aiuterà davvero :)) è impostarlo nel file Xml.
Se è possibile ottenere la densità dal codice, è possibile utilizzare la conversione: "La conversione delle unità dip in pixel dello schermo è semplice: pixel = dips * (densità / 160)". (da http://developer.android.com/guide/practices/screens_support.html )
Modifica: puoi ottenere la densità dello schermo: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi