[android] Was ist der Unterschied zwischen "px", "dip", "dp" und "sp"?



Answers

So ziemlich alles darüber und wie man die beste Unterstützung für mehrere Bildschirme mit unterschiedlichen Größen und Dichten erreicht, ist hier sehr gut dokumentiert:

Bildschirmgröße
Tatsächliche physische Größe, gemessen als Bildschirmdiagonale. Zur Vereinfachung gruppiert Android alle tatsächlichen Bildschirmgrößen in vier verallgemeinerte Größen: klein, normal, groß und extra groß.

Bildschirmdichte
Die Anzahl der Pixel innerhalb eines physischen Bereichs des Bildschirms; normalerweise als dpi (Punkte pro Zoll) bezeichnet. Zum Beispiel weist ein Bildschirm mit "niedriger" Dichte im Vergleich zu einem Bildschirm mit "normaler" oder "hoher" Dichte weniger Pixel innerhalb eines gegebenen physikalischen Bereichs auf. Zur Vereinfachung gruppiert Android alle tatsächlichen Bildschirmdichten in sechs generalisierte Dichten: niedrig, mittel, hoch, extra hoch, extra hoch und extra hoch.

Orientierung
Die Ausrichtung des Bildschirms aus der Sicht des Benutzers. Dies ist entweder Querformat oder Hochformat, was bedeutet, dass das Seitenverhältnis des Bildschirms entweder breit oder hoch ist. Beachten Sie, dass verschiedene Geräte nicht nur standardmäßig in unterschiedlichen Ausrichtungen arbeiten, sondern dass sich die Ausrichtung zur Laufzeit ändern kann, wenn der Benutzer das Gerät dreht.

Auflösung
Die Gesamtzahl der physischen Pixel auf einem Bildschirm. Wenn Sie Unterstützung für mehrere Bildschirme hinzufügen, arbeiten Anwendungen nicht direkt mit der Auflösung. Anwendungen sollten sich nur mit der Bildschirmgröße und -dichte befassen, wie durch die verallgemeinerten Größen- und Dichtegruppen spezifiziert.

Dichteunabhängiges Pixel (dp)
Eine virtuelle Pixeleinheit, die Sie beim Definieren des UI-Layouts, zum Ausdrücken von Layoutdimensionen oder zum Positionieren in einer dichteunabhängigen Weise verwenden sollten. Das dichteunabhängige Pixel ist äquivalent zu einem physikalischen Pixel auf einem Bildschirm mit 160 dpi, was die Grundliniendichte ist, die das System für einen Bildschirm mit "mittlerer" Dichte annimmt. Zur Laufzeit behandelt das System transparent jegliche Skalierung der dp-Einheiten, je nach der tatsächlichen Dichte des verwendeten Bildschirms. Die Umwandlung von px = dp * (dpi / 160) Einheiten in Bildschirmpixel ist einfach: px = dp * (dpi / 160) . Auf einem Bildschirm mit 240 dpi entspricht 1 dp beispielsweise 1,5 physikalischen Pixeln. Sie sollten beim Definieren der Benutzeroberfläche Ihrer Anwendung immer dp-Einheiten verwenden, um eine ordnungsgemäße Anzeige Ihrer Benutzeroberfläche auf Bildschirmen mit unterschiedlichen Dichten sicherzustellen.

Wenn Sie ernsthaft daran interessiert sind, eine Android-App für mehr als einen Gerätetyp zu entwickeln, sollten Sie mindestens einmal das Support-Entwicklungsdokument lesen. Darüber hinaus ist es immer eine gute Sache, die tatsächliche Anzahl aktiver Geräte zu kennen, die eine bestimmte Bildschirmkonfiguration haben.

Question

Was ist der Unterschied zwischen Android-Maßeinheiten?

  • px
  • tauchen
  • dp
  • sp



dp ist dip . Verwenden Sie es für alles (Rand, Padding, etc.).

Verwenden Sie sp für {text-size}.

Um die gleiche Größe bei unterschiedlichen Bildschirmdichten zu erhalten, setzt Android diese Einheiten zur Laufzeit in Pixel um, so dass Sie keine komplizierte Mathematik anwenden müssen.

Sehen Sie den Unterschied zwischen px , dp und sp auf verschiedenen Bildschirmgrößen.

Quelle: Android-Programmierung: Der Big Nerd Ranch Guide




SDP - a scalable size unit - basically it is not a unit, but dimension resources for different screen size.

Try the sdp library from Intuit. It's very handy to solve unit problems, and you can quickly support multiple screens .

Verwendung

android:paddingBottom="@dimen/_15sdp" for positive and android:layout_marginTop="@dimen/_minus10sdp" for negative sdp sdp

It has equivalent value in dp for each size in values-sw<N>dp folders (sw = smallestWidth).

Attention

Use it carefully! In most cases you still need to design a different layout for tablets.

Beispiel

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

You can use db for text size, but I prefer ssp for text size.

For more details, check the library GitHub page .




sp = scale independent pixel

dp = density independent pixels

dpi = density pixels

I have gone through the above answers...not finding them exactly correct. sp for text size, dp for layout bounds - standard. But sp for text size will break the layout if used carelessly in most of the devices.

sp take the textsize of the device, whereas dp take that of device density standard( never change in a device) Say 100sp text can occupies 80% of screen or 100% of screen depending on the font size set in device

You can use sp for layout bounds also, it will work :) No standard app use sp for whole text

Use sp and dp for text size considering UX.

  • Dont use sp for text in toolbar( can use android dimens available or dp)
  • Dont use sp for text in small bounded buttons, very smaller text, etc

Some people use huge FONT in their phone for more readability, giving them small hardcoded sized text will be an UX issue. Put sp for text where necessary, but make sure it won't break the layout.




dpi -

  • Punkte pro Zoll
  • Messung der Pixeldichte des Bildschirms

px - Pixel

  • Zur Abbildung von Bildschirmpixeln

pt - Punkte

  • Etwa 1/72 Zoll, in Bezug auf die physische Bildschirmgröße.

Zoll - in Bezug auf die physische Bildschirmgröße (1 Zoll = 2,54 cm).

Millimeter-Millimeter - in Bezug auf die physische Bildschirmgröße.

sp - skalenunabhängiges Pixel.

  • Basierend auf der bevorzugten Schriftgröße des Benutzers.
  • Schriftart sollte in 'sp' sein.

dip -

  • dip == dp
  • Dichteunabhängiges Pixel.
  • Es variiert basierend auf der Bildschirmdichte.
  • In Bildschirm mit 160 dpi, 1 dp = 1 Pixel.
  • Verwenden Sie dp mit Ausnahme der Textschriftgröße.

Im Standard werden DP und SP verwendet. sp für Schriftgröße und dp für alles andere.

Formel für die Umrechnung von Einheiten:

px = dp * (dpi / 160);

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  



Alles, was mit der Größe von Text und Aussehen zusammenhängt, muss sp oder pt . Dagegen muss alles, was mit der Größe der Steuerelemente, den Layouts usw. zu dp , mit dp .

Sie können sowohl dp als auch dip an seinen Stellen verwenden.




Wo soll was & Beziehung zwischen px & dp verwendet werden?

Dichteunabhängiges Pixel (dp)

Eine virtuelle Pixeleinheit, die Sie beim Definieren des UI-Layouts, zum Ausdrücken von Layoutdimensionen oder zum Positionieren in einer dichteunabhängigen Weise verwenden sollten. Wie oben beschrieben, ist das dichteunabhängige Pixel äquivalent zu einem physikalischen Pixel auf einem Bildschirm mit 160 dpi, was die Grundliniendichte ist, die das System für einen Bildschirm mit "mittlerer" Dichte annimmt. Zur Laufzeit behandelt das System transparent jegliche Skalierung der dp-Einheiten, je nach der tatsächlichen Dichte des verwendeten Bildschirms. Die Umwandlung von dpi-Einheiten in Bildschirmpixel ist einfach:

px = dp * (dpi / 160).

Auf einem Bildschirm mit 240 dpi entspricht 1 dp beispielsweise 1,5 physikalischen Pixeln. Sie sollten beim Definieren der Benutzeroberfläche Ihrer Anwendung immer dp-Einheiten verwenden, um eine ordnungsgemäße Anzeige Ihrer Benutzeroberfläche auf Bildschirmen mit unterschiedlichen Dichten sicherzustellen.

Das Verständnis von Pixel zu Pixel und umgekehrt ist sehr wichtig (vor allem, um dem Creative-Team exakte Werte für dpi zu geben)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • Versuchen Sie, alle Pixelwerte in geraden Zahlen vom Creative-Team zu erhalten. Sonst wird die Präzision verloren, wenn mit 0,5 multipliziert wird.

px

Es ist oben erklärt. Versuchen Sie es in Layoutdateien zu vermeiden. Aber es gibt Fälle, in denen px benötigt wird. zum Beispiel ListView-Trennlinie. px ist hier besser, um eine Einpixellinie als Trennlinie für alle Bildschirmauflösungen zu geben.

sp

Verwenden Sie sp für Schriftgrößen. Dann ändert sich nur die Schriftart in der Anwendung, während sich die Größe der Geräteschriftart ändert (dh Anzeige -> Schriftarten auf dem Gerät). Wenn Sie eine Schriftart mit statischer Größe in der App beibehalten möchten, können Sie die Schriftdimension in dp angeben. In einem solchen Fall wird es sich nie ändern. Entwickler können eine solche Anforderung für einige bestimmte Bildschirme erhalten, dafür können Entwickler dp anstelle von sp verwenden. In allen anderen Fällen wird sp empfohlen.




px Pixel - Punkt pro Skala entspricht den tatsächlichen Pixeln auf dem Bildschirm.

in Zoll - basierend auf der physischen Größe des Bildschirms.

Millimeter Millimeter - basierend auf der physischen Größe des Bildschirms.

pt Points - 1/72 Zoll basierend auf der physischen Größe des Bildschirms.

dp Dichte - unabhängige Pixel - eine abstrakte Einheit, die auf der physischen Dichte des Bildschirms basiert. Diese Einheiten sind relativ zu einem 160-dpi-Bildschirm, so dass ein dpi ein Pixel auf einem 160-dpi-Bildschirm ist. Das Verhältnis von dp zu Pixel wird sich mit der Bildschirmdichte ändern, aber nicht notwendigerweise in direktem Verhältnis. Anmerkung: Der Compiler akzeptiert sowohl dip als auch dp , obwohl dp konsistenter mit sp .

sp - Skalierungsunabhängige Pixel - Dies ist wie bei der dp Einheit, wird aber auch anhand der bevorzugten Schriftgröße des Benutzers skaliert. Es wird empfohlen, dieses Gerät zum Festlegen von Schriftgrößen zu verwenden, damit diese sowohl für die Bildschirmdichte als auch für die Benutzereinstellungen angepasst werden.

Nehmen wir als Beispiel zwei Bildschirme gleicher Größe, die eine Bildschirmdichte von 160 dpi (dots per inch = Pixel pro Zoll) und die andere 240 dpi.

                          Lower resolution   screen          Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent Pixels          240                               240
(“dip” or “dp” or “dps”)

Scale-independent pixels 
 (“sip” or “sp”)                  Depends on user font size settings    same



Im Grunde genommen ist die einzige Zeit, in der px verwendet wird, ein px, und das ist, wenn Sie genau ein Pixel auf dem Bildschirm haben wollen, wie im Falle eines Teilers:

Bei> 160 dpi können Sie 2-3 Pixel erhalten,

Bei> 120 dpi wird auf 0 gerundet.




Before answering this question let me decrease the number of units first. So here you go: dp or dip are both the same and are known as Density-independent pixels .

1. px - stands for pixels. Pixels are a single dot, point on a screen. Generally in the mobile industry it is measured in ppi (pixels per inch). Screen resolution is directly proportional to ppi, the larger the number of pixels per inch the higher the screen resolution.

For example, if you draw an image of a size 200 px * 200 px , then its appearance must be different on a high-resolution device versus a low-resolution device. The reason is a 200 px image on a low-resolution phone will be look larger than on a high-resolution device.

Below images are showing a resolution of the same image on different phones -

  • Phone with High screen resolution

  • Phone with Low screen resolution

2. dip or dp - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. "Density independence" refers to the uniform display of UI elements on screens with different densities.

  • Image which is showing 80px (left side image) and 80 dp (right-side image) . Checkout difference.

A dp is equal to one physical pixel on a screen with a density of 160 . To calculate dp:

dp = (width in pixels * 160) / screen density

3. sp - stands for scalable pixels. Generally sp is used for texts on the UI, and sp preserves the font settings. For example, if a user selected a larger font than 30 sp it will auto scale to appear large according to a user preference.




The screen of a mobile phone is made up of thousands of tiny dots known as pixels (px) . A pixel is the smallest element which goes to make the picture. The more the number of pixels to make a picture or wording, the sharper it becomes and makes the smartphone screen more easily readable.

Screen resolution is measured in terms of number of pixels on the screen. Screen resolution is a commonly-used specification when buying a device, but it's actually not that useful when designing for Android because thinking of screens in terms of pixels ignores the notion of physical size, which for a touch device is really really important.

Density independent pixel (dp or dip) allow the designer to create assets that appear in a expected way, no matter the resolution or density of target device.

A density independent pixel (dp or dip) is equal to one pixel at the baseline density or 160 dpi (dots per inch).

1 px/1dp = 160 dpi/160 dpi

2 px/1dp = 320 dpi(2x)/160 dpi

woher,

dpi is dots per inch

So, at 320 dpi, 1 dp is equal to 2 px.

Formula

px/dp = dpi/160dpi

Dots per inch (dpi) is a measure of the sharpness (that is, the density of illuminated points) on a display screen. The dots per inch for a given picture resolution will differ based on the overall screen size since the same number of pixels are being spread out over a different space.

Working with density independent pixels help us to deal with a situation like where you have two devices with same pixel resolution, but differing amount of space. Suppose in a case, a tablet and phone has the same pixel resolution 1280 by 800 pixels (160 dpi) and 800 by 1280 pixels (320 dpi) respectively.

Now because a tablet is at baseline density (160 dpi) its physical and density independent pixels sizes are the same, 1280 by 800. The phone on the other hand has a higher pixel density, so it has half as many density independent pixels as physical pixels. So a phone has 400 by 640 density independent pixels. So using a density-independent pixel makes it easier to mentally picture that tablet has much more space than the phone.

Similarly, if you have two devices with similar screen size, but different pixel density, say one is 800 by 1280 pixels (320 dpi), and the other is 400 by 640 pixels (160 dpi), we don't need to define totally different layouts for these two devices as we can measure assets in terms of density independent pixel which is same for both devices.

800 by 1280 pixels (320dpi)=400 by 640 density independent pixel (dp)

400 by 640 pixels (160 dpi)=400 by 640 density independent pixel (dp)

Scale independent pixels(sp) is the preferred unit for font size. For accessibility purposes, Android allows users to customize their device's font size. Users that have trouble reading text can increase their device's font size. You can normally find this option in the display setting on your phone or tablet under font size. It's often also available through the accessibility settings.

With scale independent pixels, 16 sp is exactly the same as 16 dp when the device's font size is normal or 100%. But when device's font size is large, for example 125%, 16 sp will translate to 20 dp or 1.25 times 16.

If you use dp as the unit for font size, then that piece of text has a specific physical size no matter if the user has customize device's font size. Using sp units will make a better experience for people with impaired eyesight.

Reference : Udacity , Google




Definitionen

px oder dot ist ein Pixel auf dem physischen Bildschirm.

dpi sind Pixel pro Zoll auf dem physischen Bildschirm und stellen die Dichte des Displays dar.

Android gibt Alias-Namen zu mehreren Dichten

  • LDpi (niedrig) ~ 120 dpi
  • MDPI (mittel) ~ 160dpi
  • hdpi (hoch) ~ 240 dpi
    • Die meisten Geräte im Jahr 2015 sind hier
  • xhdpi (extra hoch) ~ 320 dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (extra-extra-hoch) ~ 480dpi
    • Nexus 5
  • xxxhdpi (extra-extra-extra-high) ~ 640 dpi

dip oder dp sind Dichte-indentierende Pixel , dh sie entsprechen mehr oder weniger Pixeln in Abhängigkeit von der physikalischen Dichte.

  • 1dp = 1px auf mdpi

sp oder sip ist ein skalenunabhängiger Pixel . Sie werden skaliert, wenn die Option " Großer Text" in Einstellungen > Eingabehilfen aktiviert ist

  • 1 sp = 1 dp
  • 1sp = 1.2dp mit Zugänglichkeit Großer Text

Was zu verwenden?

Verwenden Sie sp für die Textgröße.

Benutze dp für alles andere.




Screen size in Android is grouped into categories ldpi , mdpi , hdpi , xhdpi , xxhdpi and xxxhdpi . Screen density is the amount of pixels within an area (like inch) of the screen. Generally it is measured in dots-per-inch ( dpi ).

PX(Pixels):

  • our usual standard pixel which maps to the screen pixel. px is meant for absolute pixels. This is used if you want to give in terms of absolute pixels for width or height. Nicht empfohlen.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp . In earlier Android versions dip was used and later changed to dp . This is alternative of px .

  • Generally we never use px because it is absolute value. If you use px to set width or height, and if that application is being downloaded into different screen sized devices, then that view will not stretch as per the screen original size.

  • dp is highly recommended to use in place of px . Use dp if you want to mention width and height to grow & shrink dynamically based on screen sizes.

  • if we give dp/dip , android will automatically calculate the pixel size on the basis of 160 pixel sized screen.

SP(Scale independent pixels):

  • scaled based on user's font size preference. Fonts should use sp .

  • when mentioning the font sizes to fit for various screen sizes, use sp . This is similar to dp .Use sp especially for font sizes to grow & shrink dynamically based on screen sizes

Android Documentation says:

when specifying dimensions, always use either dp or sp units. A dp is a density-independent pixel that corresponds to the physical size of a pixel at 160 dpi . An sp is the same base unit, but is scaled by the user's preferred text size (it's a scale-independent pixel), so you should use this measurement unit when defining text size




Hier ist die Formel von Android verwendet:

px = dp * (dpi / 160)

Wobei dpi eine der folgenden Bildschirmdichten ist. Für eine Liste aller möglichen Dichten gehts hier

Es definiert die "DENSITY_ *" Konstanten.

  • LDpi (niedrig) ~ 120 dpi
  • MDPI (mittel) ~ 160dpi
  • hdpi (hoch) ~ 240 dpi
  • xhdpi (extra hoch) ~ 320 dpi
  • xxhdpi (extra-extra-hoch) ~ 480dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640 dpi

Von hier genommen .

Dies wird viel Verwirrung bei der Übersetzung zwischen px und dp ausräumen, wenn Sie Ihre Bildschirmauflösung kennen.

Nehmen wir an, Sie möchten ein Bild von 60 dpi für einen HDPI-Bildschirm, dann ist die physikalische Pixelgröße von 60 dpi:

px = 60 * (240 / 160)



Der Unterschied zwischen den Einheiten " dp und " sp ", die in der offiziellen Dokumentation als " Präferenz für die Schriftgröße des Benutzers " angegeben sind, kann zur Laufzeit durch Ändern der Option Settings->Accessibility->Large Text angezeigt werden.

Large Text Option " Large Text " wird Text 1.3 mal größer.

private static final float LARGE_FONT_SCALE = 1.3f;

Dies ist natürlich abhängig vom Anbieter, da es in packages/apps/Settings .






Related