Verwendet setWidth(int Pixel) Geräteunabhängige Pixel oder physikalische Pixel als Einheit? Beispielsweise setzt setWidth(100) die Breite einer Ansicht auf 100 dips oder 100 Pixel?
Danke.
Verwendet setWidth(int Pixel) Geräteunabhängige Pixel oder physikalische Pixel als Einheit? Beispielsweise setzt setWidth(100) die Breite einer Ansicht auf 100 dips oder 100 Pixel?
Danke.
Es verwendet Pixel, aber ich bin sicher, dass Sie sich fragen, wie man stattdessen Dips verwendet. Die Antwort finden Sie unter TypedValue.applyDimension()
. Hier ist ein Beispiel, wie man in Code Dips in px umwandelt:
// Konvertiert 14 Dip in sein Äquivalent in px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
Der richtige Weg, um eine konstante Anzahl von DIPs im Code zu erhalten, besteht darin, eine Ressourcen-XML-Datei mit dp-Werten zu erstellen, ähnlich wie:
100dp
75dp
Verweisen Sie dann in Ihrem Code auf die Ressource wie folgt:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
Der zurückgegebene Float-Wert wird entsprechend für die Pixeldichte des Geräts skaliert, sodass Sie keine Konvertierungsmethode in Ihrer Anwendung replizieren müssen.
Methode setWidth(100), setzt 100 px als Breite (nicht in dp). Deshalb könnten Sie auf verschiedenen Android-Handys Breitenprobleme haben. Verwenden Sie daher zur Messung dp anstelle von Pixeln. Verwenden Sie den folgenden Code, um die Messung in dp von einer Beispielbreite von 300px und einer Höhe von 400px zu erhalten.
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
Basierend auf den obigen Antworten, die für mich gut funktionieren, generiere ich einige Hilfsmethoden, fügen Sie sie einfach in Ihre Utils ein, um sie im gesamten Projekt zu verwenden.
// Wert in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// Wert in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.