Antworten:
Sie müssen es mithilfe des Skalierungsfaktors der Anzeige von dps in Pixel konvertieren.
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
dp
soll px
? Vielen Dank.
Ich weiß, dass dies eine alte Frage ist, aber ich habe einen viel saubereren Weg gefunden, diese Konvertierung durchzuführen.
Java
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65, getResources().getDisplayMetrics());
Kotlin
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 65f, resources.displayMetrics)
65
obige ist der DP-Wert, den Sie in PX konvertieren möchten
Wenn Sie sich Ihre Anforderungen ansehen, gibt es auch eine alternative Lösung. Anscheinend kennen Sie die Dimensionen in dp zur Kompilierungszeit, sodass Sie den Ressourcen einen Dimen-Eintrag hinzufügen können. Anschließend können Sie den Bemaßungseintrag abfragen und er wird bei diesem Aufruf automatisch in Pixel konvertiert:
final float inPixels= mActivity.getResources().getDimension(R.dimen.dimen_entry_in_dp);
Und Ihre dimension.xml wird haben:
<dimen name="dimen_entry_in_dp">72dp</dimen>
Wenn Sie diese Idee erweitern, können Sie einfach den Wert 1dp oder 1sp als Maßeintrag speichern, den Wert abfragen und als Multiplikator verwenden. Mit diesem Ansatz isolieren Sie den Code aus dem mathematischen Material und verlassen sich bei der Durchführung der Berechnungen auf die Bibliothek.
Der einfachste Weg (und funktioniert sogar ab API 1), der getestet wurde, ist:
getResources().getDimensionPixelSize(R.dimen.example_dimen);
Aus Dokumentationen:
Rufen Sie eine Dimension für eine bestimmte Ressourcen-ID ab, um sie als Größe in Rohpixeln zu verwenden. Dies ist dasselbe wie getDimension (int), außer dass der zurückgegebene Wert zur Verwendung als Größe in ganzzahlige Pixel konvertiert wird. Bei einer Größenkonvertierung wird der Basiswert gerundet und sichergestellt, dass ein Basiswert ungleich Null mindestens ein Pixel groß ist.
Ja, es rundet den Wert ab, aber es ist nicht sehr schlecht (nur bei ungeraden Werten auf hdpi- und ldpi-Geräten muss ein kleiner Wert hinzugefügt werden, wenn ldpi nicht sehr häufig ist). Ich habe in einem xxhdpi-Gerät getestet, das 4dp in 16 (Pixel) konvertiert, und das ist wahr.