Android View.setPadding(int left, int top, int right, int bottom)
akzeptiert nur Werte in px, aber ich möchte Padding in DP setzen. Gibt es einen Weg dahin?View.setPadding akzeptiert nur in px, gibt es trotzdem setPadding in dp?
Antwort
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);
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 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
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)
Dies ist eine bessere Übung IMO als die angenommene Antwort – Aphex
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
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 –
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? –