是Density independent pixel的縮寫,指的是抽象意義上的像素,跟設備的螢屏密度有關系,
它是Android里的一個單位,dip和dp是一樣的,
Google的官方說明是這樣的:
Density-independent pixel (dp)
A virtual pixel unit that you should use when defining UI layout, to express layout dimensions or position in a density-independent way.
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen. At runtime, the system transparently handles any scaling of the dp units, as necessary, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels. You should always use dp units when defining your application's UI, to ensure proper display of your UI on screens with different densities.
就是說在160dpi的螢屏上,1dip=1px,
它跟螢屏密度有關,如果螢屏密度大,1dip代表的px就多,比如在320dpi的螢屏上,1dip=2px,
為什么我們在布局的時候最好要用dip,不要用px?
是因為這個世界上存在著很多不同螢屏密度的手機,螢屏密度是什么?就是dpi,就是單位長度里的像素數量,
想象一下,如果這些手機的尺寸一樣,螢屏密度相差很大,那么是不是說一個手機水平方向上像素很少,另一個手機水平方向上像素很多?那我們畫同樣pix數量的時候,它顯
示的長度不就會不一樣了?
比如下面圖中的兩個手機,同時設定2px長度的Button,在螢屏密度較高的手機里就會顯示的比較小,
而同時設定的2dip長度的Button,在兩個手機上顯示的大小是一樣的,

所以如果你在App布局中都用的px作為單位,那么你的App跑在各個設備上就會出現奇奇怪怪的現象了,
來看一下emulator上的效果,我定義了兩個Button,分別用px和dip做單位,
布局檔案里這樣寫
<Button android:layout_width="100px"
android:layout_height="100px"
android:text="@string/str_button1"/>
<Button android:layout_width="100dip"
android:layout_height="100dip"
android:text="@string/str_button1"/>
顯示的界面是這樣的:

getResources().getDisplayMetrics().densityDpi 就是螢屏密度,
getResources().getDisplayMetrics().density 也可以理解為1dip相當于多少個px啦,
上面的dpi是240,1dip=1.5px
你看,100dip的Button是100pxButton的1.5倍長吧,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/266562.html
標籤:嵌入式
上一篇:筆記本安裝 Fedora-Workstation-Live 33 系統
下一篇:一文了解串口列印
