2010-11-25 6 views

Antwort

162

Straight to 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); 
+1

Hallo, ich habe eine Frage. Wird diese Formel nur für die Polsterung oder irgendetwas anderes verwendet? z.B. Rand oder Abdunkelung eines Rechtecks? – Emerald214

+4

Dies ist die Formel für [Konvertieren von dp-Einheiten in Pixeleinheiten] (http://developer.android.com/guide/practices/screens_support.html#dips-pels). Sie können es überall verwenden –

+2

Ich nehme an, die 'getResources()' ist eine Funktion, die von einer Aktivität geerbt wird, aber ich versuche, diese Zeilen in einem benutzerdefinierten Listview-Adapter zu verwenden. Kann ich das irgendwie machen, wenn ich 'getResources()' nicht aufrufen kann? –

0

Ich habe das gleiche Problem. Die einzige Lösung, die ich gefunden habe (es wird Ihnen nicht wirklich helfen :)), ist es in der Xml-Datei zu setzen.

Wenn Sie die Dichte aus dem Code erhalten können, können Sie die Umwandlung verwenden: "Die Umwandlung von Dip-Einheiten in Bildschirm-Pixel ist einfach: Pixel = Dips * (Dichte/160)." (Von http://developer.android.com/guide/practices/screens_support.html)

Edit: können Sie die Rasterdichte erhalten: http://developer.android.com/reference/android/util/DisplayMetrics.html#densityDpi

78

Wenn Sie die Dimension (in dp oder was auch immer) in einer XML-Datei definieren (das ist besser sowieso, zumindest in den meisten Fällen), können Sie den Pixelwert davon mit diesem Code erhalten:

context.getResources().getDimensionPixelSize(R.dimen.your_dimension_name) 
+5

Dies ist eine bessere Übung IMO als die angenommene Antwort – Aphex