99 Stimmen

Verwendet setWidth(int Pixel) dip oder px?

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.

226voto

Dan Lew Punkte 83507

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()));

27voto

SDJMcHattie Punkte 1670

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.

10voto

Nidhin Punkte 1788

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());

4voto

pomber Punkte 21013
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;

Quelle (@Romain Guy)

2voto

Abhishek Garg Punkte 2672

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.com

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.

Powered by:

X