Antworten:
Direkt zum Code
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()
gehe davon aus, dass dies eine Funktion ist, die von einer Aktivität geerbt wird, aber ich versuche, diese Zeilen in einem benutzerdefinierten Listenansichtsadapter zu verwenden. Kann ich das auf irgendeine Weise tun, wenn ich nicht anrufen kann getResources()
?
Wenn Sie die Dimension (in dp oder was auch immer) in einer XML-Datei definieren (was zumindest in den meisten Fällen ohnehin besser ist), können Sie den Pixelwert mithilfe dieses Codes ermitteln:
context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name)
Es gibt eine bessere Möglichkeit, Werte programmgesteuert in dp umzuwandeln:
int value = 200;
int dpValue = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
value,
context.getResources().getDisplayMetrics());
Dann wenden Sie dpValue
auf Ihre Methode an, zum Beispiel:setPadding(dpValue,dpValue,dpValue,dpValue);
Sie können die Pixel für einen bestimmten DPI-Wert berechnen: http://forum.xda-developers.com/showpost.php?p=6284958&postcount=31
Ich habe das gleiche Problem. Die einzige Lösung, die ich gefunden habe (es wird dir nicht wirklich helfen :)), besteht darin, sie in der XML-Datei festzulegen.
Wenn Sie die Dichte aus dem Code erhalten können, können Sie die Konvertierung verwenden: "Die Konvertierung von Dip-Einheiten in Bildschirmpixel ist einfach: Pixel = Dips * (Dichte / 160)." (von http://developer.android.com/guide/practices/screens_support.html )
Bearbeiten: Sie können die Bildschirmdichte abrufen: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi