當前位置:首頁 » 安卓系統 » androiddipdp

androiddipdp

發布時間: 2023-02-04 04:12:41

『壹』 Android中dip,dp,sp,pt和px的區別

Android 開發字體的大小需要用google提供的sp單位,而控制項的大小需要使用dip 或者dp。
1. dp(或者dip device independent pixels)一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp=1px。不同設備有不同的顯示效果,這個和設備硬體有關。
2. sp(Scaled Pixels)主要用於字體顯示,與刻度無關的一種像素,與dp類似,但是可以根據用戶的字體大小首選項進行縮放。
3. xp即像素,1px代表屏幕上一個物理的像素點,px單位不被建議使用,因為同樣100px的圖片,在不同手機上顯示的實際大小可能不同。

『貳』 探究安卓px/dp/dip/dpi/ppi/sp/density含義

dp=(160/ 像素密度值)px

so, xhdpi時,dp=1/2px;xxhdpi時,dp=1/3px;

ldpi QVGA (240×320)
mdpi HVGA (320×480)
hdpi WVGA (480×800), FWVGA (480×854)
xhdpi 720P(1280 720)
xxhdpi 1080p(1920
1080 )
xxxhdpi 4K(3840×2160)

px : pixels(像素)
ppi : pixels per inch(像素密度,所表示的是每英寸所擁有的像素數量)
dpi : dots per inch(每英寸的點數)
dp、dip : device independent pixels(設備獨立像素)
sp : scaled pixels(放大像素)
density:安卓系統中的density表示的是密度系數。計算方法是density = dpi / 160。即將160dpi作為標準的密度值(每英寸點數),我們設置的dp值即是在160的標准密度值下的像素數;所以px = density * dp。

PPI和DPI的含義區別?
PPI:pixels per inch(像素密度,所表示的是每英寸所擁有的像素數量)

為什麼解析度一樣,屏幕尺寸一樣, 同樣的dp值顯示出來的實際像素值不一樣?
答:PPI是固定計算的,和解析度,屏幕尺寸相關。DPI是ROM廠商設定的,不是確定公式計算的。同樣的解析度和屏幕尺寸,只能得到PPI一致。但是這不是實際顯示的結果,設置dp值是按照DPI來計算的,這個時候需要看設備實際的DPI值,DPI不同結果不同。廠商可能為了顯示效果而設置了不同的density(DPI).

『叄』 android dp和dip的區別

Android中,dp是Density-independent Pixels簡寫,而dip則是Density Independent Pixels,實際上指的是一個概念,都是Android的單位。
dp等同於dip,它是一個長度單位,1dp=1/160英寸。

dp這個單位的意義在於:你可以根據看到的實際大小,在應用中設置對應的dp值,而使得不同的設備上看起來一樣大。
詳情請見:http://blog.csdn.net/chenyufei1013/article/details/8363619

『肆』 Android機型適配總結

解析度對應DPI

ldpi  QVGA (240×320)

mdpi  HVGA (320×480)

hdpi  WVGA (480×800),FWVGA (480×854)

xhdpi  720P(1280*720)

xxhdpi 1080p(1920*1080 )

xxxhdpi 4K(3840×2160)

機型適配方面常規處理方法:

1、開發之前UI給出不同尺寸標準的多套素材,一般情況下給出:hdpi、xhdpi、xxxhdpi 三種尺寸類型的素材。

2、特殊類型圖片使用Android Studio內置draw9path工具進行製作,例如聊天界面中內容背景圖片。

3、布局編寫時盡量使用 Linearlayout 與  RelativeLayout,LinearLayout內部可以使用weight(權重)屬性將子控制項的尺寸按比例進行設置。RelativeLayout 內部可以使用layout_align...(相對於xxx)屬性將子控制項的尺寸相對於父控制項或相對於其他子控制項進行設置。

4、設置尺寸的時候長度單位  布局使用 dp  字元使用  sp。 其實字體大小的尺寸使用  dp 也可以,但是sp的情況下 用戶使用系統設置字體大小的時候可以改變控制項中字體的大小,但是使用dp設置的字體就不會產生變化。

5、針對每一個屏幕的尺寸生成一套px與dp的轉換方案,詳情見博客: Android機型適配方案 。

6、google推出了一個百分比布局庫,可以使用百分比的方式進行布局尺寸的設置,詳情見博客: Android百分比布局庫(percent-support-lib)解析與擴展

7、利用自定義View的方式去解決,其實原理也是,在繪制View的時候,獲取屏幕的尺寸然後按照一定的比例去設置控制項的尺寸

還有一些瑣碎知識點需要了解並記住:

1. px (pixels)像素 :

一個像素通常被視為圖像的最小的完整采樣,這個用的比較多,特別是web開發,頁面基本都是使用像素作為單位的.

2.dp:

這個是最常用但也最難理解的尺寸單位。它與「像素密度」密切相關,所以首先我們解釋一下什麼是像素密度。假設有一部手機,屏幕的物理尺寸為1.5英寸x2英寸,屏幕解析度為240x320,則我們可以計算出在這部手機的屏幕上,每英寸包含的像素點的數量為240/1.5=160dpi(橫向)或320/2=160dpi(縱向),160dpi就是這部手機的像素密度,像素密度的單位dpi是Dots Per Inch的縮寫,即每英寸像素數量。橫向和縱向的這個值都是相同的,原因是大部分手機屏幕使用正方形的像素點。

不同的手機/平板可能具有不同的像素密度,例如同為4寸手機,有480x320解析度的也有800x480解析度的,前者的像素密度就比較低。Android系統定義了四種像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它們對應的dp到px的系數分別為0.75、1、1.5和2,這個系數乘以dp長度就是像素數。例如界面上有一個長度為「80dp」的圖片,那麼它在240dpi的手機上實際顯示為80x1.5=120px,在320dpi的手機上實際顯示為80x2=160px。如果你拿這兩部手機放在一起對比,會發現這個圖片的物理尺寸「差不多」。

3.dip:

與dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,後來為了與sp統一就建議使用dp這個名字了。

4.sp:

與縮放無關的抽象像素(Scale-independent Pixel)。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義文字尺寸大小(小、正常、大、超大等等),當文字尺寸是「正常」時1sp=1dp=0.00625英寸,而當文字尺寸是「大」或「超大」時,1sp>1dp=0.00625英寸。類似我們在windows里調整字體尺寸以後的效果——窗口大小不變,只有文字大小改變。

還有一些詳細的情況需要了解,都在這個博客里: 點擊進入

『伍』 Android 關於"尺寸"的那些事(dp,dip,sp,pt,px...)

屏幕大小:屏幕大小是手機對角線的物理尺寸,以英寸inch為單位。比如我的Mix 2手機屏幕大小為5.99 inches,意味著我的屏幕對角線長度為5.99inches = 5.99 * 2.54 = 15.2146cm

解析度:屏幕的像素點數,一般表示為a*b。例如某手機解析度為21601080,意味著手機屏幕的豎直方向(長)有2160個像素點,水平方向(寬)有1080個像素點。

px :Pixels ,像素;對應屏幕上的實際像素,是畫面中最小的點(單位色塊),像素大小沒有固定長度值,不同設備上1個單位像素色塊大小不同。

這么說可能有點陌生,用屏幕解析度來說,今年流行起來的「全面屏」解析度是 2160*1080,但是你也可以發現,雖然很多全面屏手機解析度一樣,但是明顯看得出來屏幕大小不一樣,這也解釋了「不同設備像素色塊大小是不同的」。

pt :1pt=1/72 inch,用於印刷業,非常簡單易用;

dpi :Dots Per Inch,每英寸點數;詳見ppi

ppi :Pixels Per Inch,每英寸像素數;數值越大顯示越細膩。計算式:ppi = 屏幕對角線像素數 / 屏幕對角線長度。

還是舉全面屏的例子,解析度2160*1080,屏幕大小是5.9inches,勾股定理可以得到對角線像素數大約是2415,那麼ppi = 2415 / 5.99 = 403.

事實上dpi 和 ppi 一定程度上可以劃等號,都表示像素密度,計算方式完全一致,只不過使用場景不一樣。dpi中的dots點屬於列印或印刷等領域,例如drawable 文件對應的就是dpi,而ppi中的pixel屬於屏幕顯示等領域

dp/dip : Density-independent Pixels,密度無關像素 - 基於屏幕物理密度的抽象單位。1dp等於 160 dpi 屏幕上的dpx,這是 系統為「中」密度屏幕假設的基線密度。在運行時,系統 根據使用中屏幕的實際密度按需要以透明方式處理 dp 單位的任何縮放 。dp 單位轉換為屏幕像素很簡單:px = dp * (dpi / 160)。 例如,在 240 dpi 屏幕上,1 dp 等於 1.5 物理像素。在定義應用的 UI 時應始終使用 dp 單位 ,以確保在不同密度的屏幕上正常顯示 UI。

如果看完文章還是覺得很懵,那麼可以直接記住: 1dp單位在設備屏幕上總是等於1/160 inch。

sp :Scale-independent Pixels ,與 dp 單位相似,也會根據用戶的字體大小偏好進行縮放。

首先我們放上源碼中對尺寸單位的轉換

可以看到,輸入值類型為dp時,返回 value * DisplayMetrics.density,到這里我們可能會發懵:嗯?不對啊,前面我們不是通過px 和 dp 的換算公式來計算的么,怎麼這里就簡簡單單乘了一個DisplayMetrics.density?不要慌,我們先看看源碼中對DisplayMetrics.density的介紹。

源碼注釋中說到「在160dpi的屏幕下,density的值為1,而在120dpi的屏幕下,density的值為0.75」,我們可以大膽的猜測一下,120dpi下的density=0.75的原因是120dpi * 1 /160dpi=0.75。實際上,也就是這么回事。我們下面會仔細的分析。

需要補充一下,通常意義上Android 屏幕的密度,指的是像素密度dpi/ppi,對應於源碼中的DisplayMetrics.densityDpi。

為什麼引入dp?

Android 引入了dp這一單位,使得不論多大屏幕,多大dpi,顯示的效果始終保持一致。

但是根據前面我們提到的px與dp的換算公式px = dp * (dpi / 160),很顯然,由於相同解析度但不同屏幕大小的設備dpi是不同的,導致px和dp的基本不存在一個固定的換算關系,為了方便屏幕適配,Android設置了6個通用的密度,換算px與dp時採取通用密度計算,而非設備實際的密度。

以下為6種通用密度,以及其最小的解析度

得到上面通用密度之後,我們換算dp與px多了一種簡便方式。前面我們提到Android將mdpi作為基準,此時1px = 1dp,又有px = dp * (dpi / 160),所以我們可以很容易的得到以下換算:

還記不記得前面源碼中的density屬性,實際上DisplayMetrics.density = dpi / 160 ,表示的就是在某個通用密度下dp與px的換算比(1dp/1px的值)

這部分其實和程序員自身已經關系不大了,畢竟參與工作之後這些都是UI人員的活兒了。不過鑒於現在我還只是一枚在校生,還是記下來以免自己遺漏吧。

建議在xhdpi中作圖

原因嘛,首先現在主流解析度是1080p,以及最近流行起來的全面屏18:9,而xhdpi對應720p,向低dpi兼容自然沒問題,即便在xxhdpi中顯示,也會有個不錯的效果。而如果以1920*1080作圖,顯然圖片素材佔用的內存很大,而且也會增大應用安裝包的大小。

只有一個原則:資源放入對應dpi的文件夾中,Android會機智的載入合適的資源。

以drawable資源為例:

我們平時開發小項目&對UI要求不高時,只使用一套xhdpi的資源就足夠了,雖然這可能會導致在hdpi及以下的手機中有些卡頓,因為xhdpi的圖片運行在hdpi及以下的手機上會比較吃內存,不過無傷大雅。

而如果不為圖片資源犯愁時(有UI人員的支持,就是任性),就可以添加所有dpi的資源。當然,重點還是要滿足ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的規律。

好像說了不少廢話,哈哈,大概就這么多吧。

『陸』 像素px、解析度、ppi、dpi、dp(dip)

屏幕尺寸(Screen Size): 屏幕對角線的長度。iPhone5屏幕尺寸為4英寸、iPhone6屏幕尺寸為4.7英寸,指的是顯示屏對角線的長度。 1 inch = 2.54cm = 25.4mm
解析度:屏幕上的像素總數。常用的表現形式如:1280x720, 1920x1080等。

px,pixel,像素,電子屏幕上組成一幅圖畫或image的基本單元。
pt, point,點,印刷行業常用單位,等於1/72英寸。
ppi,pixel per inch,每英寸像素數,值越高,屏幕越細膩。
dpi, dot per inch,每英寸多少點,該值越高,則圖片越細膩。
dp,dip, Density-independent pixel,安卓開發用的長度單位。以160ppi為標准,和iPhone的scale差不多的意思。安卓用dp適配,系統會自動將dp轉換為px。當屏幕像素點密度為160ppi時,1dp=1px。

當圖片的解析度是72ppi(dpi)時,1pt = 1px;
當圖片的解析度是72*2ppi(dpi)時,1pt = 2px;

dpi最初用於衡量列印物上每英寸的點數密度,DPI值越大圖片越精細。當DPI的概念用在計算機屏幕上時,就應稱之為ppi。同理: PPI就是計算機屏幕上每英寸可以顯示的像素點的數量。在電子屏幕顯示中ppi和dpi是一樣的。

假設屏幕解析度為W H(px),物理尺寸為a b(inch),
則我們常說的屏幕尺寸c(如5.0英寸)其實是對角線的長度,因此

則像素密度(PPI),指的是屏幕單位長度的像素數

由此我們推理出:

因此我們可以得出PPI( DPI)計算公式:

dp,獨立像素,虛擬單位,又稱設備無關像素。1dp的長度相當於一個160dpi的屏幕上一個物理像素的長度。而160dpi的屏幕則是被android定義為基準的屏幕(mdpi)。在app運行的時候,android會將dp轉為實際像素進行布局。轉換的公式為:
px = dp * (dpi / 160)。
dp為安卓開發時的基本長度單位,根據不同的屏幕解析度,與px有不同的對應關系。根據其像素密度,我們將安卓端屏幕分為以下幾種規格:

1dp即為當屏幕密度值為160ppi時,1pt=1px。則,在上表中,當密度為mdpi時,1dp = 1px。 以mdpi為標准,上表中屏幕的密度值比分別為:

即,在xhdpi的密度下,1dp=2px;在hdpi情況下,1dp=1.5px。其他類推。

『柒』 px,dpi,dp(dip)之間的關系

px
是英文單詞pixel的縮寫,意為像素,屏幕上的點。我們通常所說的解析度如480X800就是指的像素。
在設計領域中,像素是用來計算數碼影像的最小單位。計算機中顯示的圖像並非連續的線條組成,而是由許多肉眼看不見的小點組成。如果把影像放大數倍,會發現這些連續色調其實是由許多色彩相近的小點所組成,這些小點就是構成影像的最小單位「像素」。由於是最小的獨立顯示單位,px均為整數,不會出現0.5px的情況。

in
表示英寸,是屏幕的物理尺寸。每英寸等於2.54厘米。例如我們經常說的手機屏幕大小有,5(英)寸、4(英)寸就是指這個單位。這些尺寸是屏幕的對角線長度。如果手機的屏幕是4英寸,表示手機的屏幕(可視區域)對角線長度是4 X 2.54 = 10.16厘米。

dpi
dpi是Dots Per Inch的縮寫, 每英寸點數,即每英寸包含像素個數。比如320X480解析度的手機,寬2英寸,高3英寸, 每英寸包含的像素點的數量為320/2=160dpi(橫向)或480/3=160dpi(縱向),160就是這部手機的dpi,橫向和縱向的這個值都是相同的,原因是大部分手機屏幕使用正方形的像素點。

density
屏幕密度,density和dpi的關系為 density = dpi/160

dp
也即dip,設備獨立像素,device independent pixels的縮寫,Android特有的單位,在dpi = 160屏幕上,1dp = 1px。px = density * dp;density = dpi / 160;px = dp * (dpi / 160);

sp
和dp很類似,一般用來設置字體大小,和dp的區別是它可以根據用戶的字體大小偏好來縮放。

『捌』 android app界面設計規范(dpi,dp,px等)

PPI(Pixels per inch):每英寸所擁有的像素數,即像素密度。
DPI(dots per inch):即每英寸上,所能印刷的網點數,一般稱為像素密度。ppi計算公式:ppi = 屏幕對角線像素數/屏幕對角線英寸數,通過勾股定理計算屏幕對角線像素數。
Screen Size(屏幕尺寸):手機屏幕尺寸大小,如3英寸、4英寸、4.3英寸、5.7英寸,指的是對角線的長度。
DIP(device independent pixel):即dip/dp,設備獨立像素。 1px = 1dp density(由dpi決定)
Resolution(解析度):指手機屏幕垂直和水平方向上的像素個數。eg解析度480
800,指該設備垂直方向有800個像素點,水平方向有480個像素點。
px(Pixel像素):相同像素的ui,在不同解析度的設備上效果不同。在小解析度設備上會放大導致失真,大解析度上被縮小。

Android Design里把主流設備的 dpi 歸成了四個檔次: 120 dpi、160 dpi、240 dpi、320 dpi ,具體見如下表格。
實際開發當中,我們經常需要對這幾個尺寸進行相互轉換(比如先在某個解析度下完成設計,然後縮放到其他尺寸微調後輸出),一般按照 dpi 之間的比例即 2:1.5:1:0.75 來給界面中的元素來進行尺寸定義。
也就是說如果以 160 dpi 作為基準的話,只要尺寸的 DP 是 4 的公倍數,XHDPI 下乘以 2,HDPI 下乘以 1.5,LDPI 下乘以 0.75 即可滿足所有尺寸下都是整數 pixel 。但假設以 240 dpi 作為標准,那需要 DP 是 3 的公倍數,XHDPI 下乘以 1.333,MDPI 下乘以 0.666 ,LDPI 下除以 2。而以 LDPI 和 XHDPI 為基準就更復雜了。同時第一款Android設備(HTC的T-Mobile G1)是屬於160dpi的。鑒於以上各種原因, 標准dpi=160

谷歌官方對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的設備為准,該設備上1dp = 1px;如果屏幕密度大,1dip代表的px就多,比如在320dpi的屏幕上,1dip=2px(即1dp代表2個像素)。在app開發時,最好用dp來做界面的布局,以保證適配不同屏幕密度的手機。

dp和px的換算公式:

我的理解,該公式表示px的數值等於dp的數值*(設備dpi/160)
注意,px、dp是單位,但density沒單位。

applyDimension的源碼如下,可參考:

android的尺寸眾多,建議使用解析度為 720x1280 的尺寸設計。這個尺寸 720x1280中顯示完美,在 1080x1920 中看起來也比較清晰;切圖後的圖片文件大小也適中,應用的內存消耗也不會過高。

app啟動圖標為48*48dp,對應各dpi設備,圖像資源像素如下:

| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|48 48px|72 72px|94 96px|144px 144px|

操作欄圖標為32*32dp,對應各dpi設備,圖像資源像素如下:其中圖形區域尺寸是24*24dp,可參考平時ui切圖會有部分留白。

| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|32 32px|48 48px|64 64px|96px 96px|

通知欄圖標為24*24dp,對應各dpi設備,圖標像素如下:

| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|24 24px|36 36px|48 48px|72px 72px|

某些場景需要用到小圖標,大小應當是16*16dp,其中圖形區域尺寸12*12dp。

| mdpi | hdpi | xhdpi | xxhdpi |
| ---:| ---: | ---:| ---:| ---:|
|16 16px|24 24px|32 32px|48px 48px|

『玖』 簡述dp、dip、sp、dpi、屏幕尺寸、解析度關系

手機實際的物理尺寸。手機對角線長度,1英寸=2.54厘米。比如常用手機的5英寸,5.5英寸等。

實際寬度與高度比率。比如 16:9。

表示寬度一列、高度一行的像素點個數。比如:480x320 1920x1080

VGA:Video Graphics Array,即:顯示繪圖矩陣,相當於640×480 像素;

HVGA:Half-size VGA,即:VGA的一半,解析度為480×320;

QVGA:Quarter VGA,即:VGA的四分之一,解析度為320×240;

WQVGA:Wide Quarter VGA,即:擴大的QVGA,解析度比QVGA高,比VGA低,一般是:400×240,480×272;

WVGA:Wide Video Graphics Array,即:擴大的VGA,解析度為800×480像素;

FWVGA:Full Wide VGA ,VGA的另一種形式,比WVGA解析度高,其分辨 率為854×480象素(16:9)。

dot per inch 每英寸的像素數,可以反映屏幕的清晰度。

px(pixel) 像素簡寫

如120dpi,160dpi等,假設QVGA(320*240)解析度的屏幕物理尺寸是(2英寸*1.5英寸),dpi=160。

計算方法:像素麵積除以物理面積 (320x320+240x240)/(2x2+1.5x1.5)=400/2.5=160;

在Android中,可以參考DisplayMetrics.java類。drawable文件夾下,有如下

drawable-ldpi對應120dpi

drawable-mdpi對應160dpi

drawable-hdpi對應240dpi

drawable-xhdpi對應320dpi

drawable-xxhdpi對應480dpi

drawable-xxxhdpi對應640dpi

dip(Device Independent Pixels)設備獨立像素 dp是dip簡寫

計算公式為:px=dpx(dpi/160)  160指 Android系統以160dpi作為基準

例如,在1920x1080解析度下,屏幕尺寸為14英寸情況下(筆記本尺寸),顯示一個長度在50x50像素的圖片,顯示很正常。如果解析度不變,屏幕尺寸變為4.5英寸,用戶看到長度顯得很小。這就需要一個獨立於像素點的顯示單位。

dp優勢在於,在解析度相同情況下,在不同屏幕上顯示大小等比是一致的。

dp用於描述顯示的長寬。

sp用於描述文字大小,使用效果與dp描述長度效果是一致的。

Android屏幕布局時,描述長寬推薦使用dp作為單位,描述文字大小推薦使用sp為單位。但是使用dp並不能解決Android多屏幕的適配問題。

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:335
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:943
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:739
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:802
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:510
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371