1. 程式人生 > >android應用開發之View的大小計量單位(px、dpi、dp、dip、sp)

android應用開發之View的大小計量單位(px、dpi、dp、dip、sp)

一、畫素(px)與螢幕解析度

1)px(Pixels ,畫素):對應螢幕上的實際畫素點。例如,320*480的螢幕在橫向有320個象素,在縱向有480個象素。 

2)螢幕解析度就是在螢幕上顯示的物理畫素總和,它等於螢幕的寬度上的畫素*高度上的畫素。在android應用程式的開發上,不會使用螢幕解析度。

3)螢幕解析度雖然是寬*高,但是它與螢幕的大小沒有關係,它與一個螢幕的畫素的數量相關。

二、dpi

1dpi:畫素每英寸,是螢幕畫素(px)密度的單位。畫素密度就是螢幕指定物理寬高範圍內能顯示的畫素的數量。

2)在android中,dpi有如下分類,ldpimdpihdpixhdpixxhdpixxxhdpi

3)在現實中,通常以mdpi為一個基準,它表示160dpi,並將此密度定義為1個密度的單位。160dpi表示在1平方英寸的面積內有160*160個畫素點。ldpi則為120dpihdpi則為240dpixhdpi則為320dpixxhdpi則為480dpixxxhdpi則為640dpi,也就是說ldpi的密度為0.75hdpi的密度為為1.5xhdpi則為2xxdpi則為3xxxhdpi則為4

4dpi跟螢幕的大小無關,它只是畫素密度的一個量度。

三、dp

獨立於物理密度的量度單位,它以160dpi為基準,無論在哪種dpi的螢幕下,1dp表示的物理長度都是一樣的。在160dpi的螢幕下,1dp1px,即一個

dp需要用一個px來表示,在240dpi的螢幕下,1dp1.5px,表示一個dp需要1.5px來表示。也就是說1dpdpi160px。它的意義在於可以讓開發人員開發出無論在哪種dpi的遮蔽下顯示大小都相同的UI也就是說在相同尺寸、但不同的解析度的手機上,用dp標識的東西,顯示的大小是一樣的。

四、dip

dp相同,只是名字不一樣。

五、sp

scaled pixels放大畫素的縮寫,專門用於處理字型的大小。它不僅與螢幕dpi有關,還與系統的預設字型大小有關。對於同一sp值,螢幕dpi越高,所顯示的字型越小;系統字型越大,所顯示的字型也越大。這就是我們設定系統字型大小後,所有使用sp為單位的字型都改變了的原因。

若字型以dp為單位,則修改系統字型大小,介面的View的字型大小不會改變。

例如:對於以下的程式碼,兩個TextView在一個垂直分佈的LinearLayout中,第一個TextView使用sp為字型的單位,第二個TextView使用dp為字型的單位:

<TextView
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="28sp" />

<TextView
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="28dp" />

在mdpi的裝置下,系統的字型為小時,效果圖如下:


兩種方式的字型是一樣大的。若在hdpi的裝置上,當系統的字型為普通時,其效果與上圖一樣。

當我設定字型為超大時,效果如下:


可以看到使用dp的字型的大小沒有改變,使用sp的字型明顯變大了。

相關推薦

android應用開發View大小計量單位pxdpidpdipsp

一、畫素(px)與螢幕解析度1)px(Pixels ,畫素):對應螢幕上的實際畫素點。例如,320*480的螢幕在橫向有320個象素,在縱向有480個象素。 2)螢幕解析度就是在螢幕上顯示的物理畫素總和

Android應用開發所有動畫使用詳解

factory 技術分享 resource bsp phi 顯示 程序 恢復 分享 題外話:有段時間沒有更新博客了,這篇文章也是之前寫了一半一直放在草稿箱,今天抽空把剩余的補上的。消失的這段時間真的好忙,節奏一下子有些適應不過來,早晨七點四十就得醒來,晚上九點四十才準備下班

Android應用開發PNGIconFontSVG圖示資源優化詳解

1 背景 最近因為一些個人私事導致好久沒寫部落格了,多事之年總算要過去了,突然沒了動力,所以趕緊先拿個最近專案中重構的一個小知識點充下數,老題重談。 在我們App開發中大家可能都會有過如下痛疾(程式設計師和設計妹妹注意嘍): 好多小的圖示好煩人,又佔體積

Android應用開發PDF轉圖片功能實現

一、概述 轉眼畢業小兩年了,回想這兩年寫的程式碼,不由得想起了上學那會兒某位網際網路大牛說,搞IT這行如果你沒有寫夠十萬行程式碼,那你就還沒有入門,俺這個時候真的有點汗顏啊,此處省略十萬字。小編最近開始整理這兩年寫的程式碼,不由得首先想起了今天要寫的這個功能—

Android應用開發提升使用者體驗1–style和themes

Android的Style設計就是提升使用者體驗的關鍵之一。Android上的Style分為了兩個方面: 1.Theme是針對窗體級別的,改變窗體樣式; 2.Style是針對窗體元素級別的,改變指定控制元件或者Layout的樣式。 Android系統的th

Android應用開發PhoneStateListener 的使用

這兩天在做翻轉靜音的功能,需要用到PhoneStateListener,以前只是知道有這麼個東西,沒有具體用過 包含此類的包是:android.telephony.PhoneStateListener 由於StatusBar中用到了PhoneStateListener中較

android應用開發Activity的簡單佈局切換

Activity到底是什麼怎麼用,到現在感覺心裡還是沒底的,說不太清楚,看文件的時候發現一大堆方法,這裡我只寫了簡單佈局的切換,至於以後Activity的用法方法,我會慢慢學習的。 1、什麼是activity Activity是一種互動的介面,一個介面

Android應用開發:網絡工具——Volley

respond sid 開發 多少 called creat miss 相等 eal 引言 在Android應用開發:網絡工具——Volley(一)中結合Cloudant服務介紹了Volley的一般使用方法,當中包括了兩種請求類型StringRequest和JsonOb

Android應用開發:網絡工具——Volley

要求 com 庫文件 urn welcom 順序 之前 air tin 引言 網絡一直是我個人的盲點,前一陣子抽空學習了一下Volley網絡工具的用法,也透過源代碼進行了進一步的學習,有一些心得想分享出來。在Android開發中,成熟的網絡工具不少,And

Android應用開發以及設計思想深度剖析1

本文內容,主題是透過應用程式來分析Android系統的設計原理與構架。我們先會簡單介紹一下Android裡的應用程式程式設計,然後以這些應用程 序在執行環境上的需求來分析出,為什麼我們的Android系統需要今天這樣的設計方案,這樣的設計會有怎樣的意義, Android究竟

Android(Java)開發獲取BLE廣播包掃描後獲取:廣播資料+掃描應答資料+RSSI

一、安卓BLE的廣播包資料從哪獲取? 通常,安卓APP讀寫BLE裝置的資料都是建立連線後通過GATT獲取或修改。但是,BLE裝置向外廣播時本身會攜帶一部分有用資訊,如將感測資料存放到廣播包的自定義資料段,最近接觸的一個iBeacon/EddyStone整合專案便是類似,因此

android原始碼分析View的事件分發

1、View的繼承關係圖 View的繼承關係圖如下: 其中最重要的子類為ViewGroup,View是所有UI元件的基類,而ViewGroup是容納這些元件的容器,同時它也是繼承於View類。而UI元件的繼承關係如上圖,比較常用的元件類用紅色字型標出

android應用開發設計模式原型模式

原型模式:用原型例項制定建立物件的種類,並且通過拷貝這些原型建立新的物件。 新建賽車的介面: public interface car_interface { public void start(); public void stop(); } 新建寶馬汽車的實現類

ArcGIS Android API 應用開發圖形繪製與長度面積量算

本文通過一個簡單的小Demo,向大家介紹如何使用ArcGIS Android API繪製點、線、面圖形,並且測量線的長度和多邊形的面積。 首先來看一下程式執行的效果圖: 實現上述功能,首先需要向地圖中新增一個GraphicsLayer,用來繪製Point、Poly

Android直播開發旅(9):OkCamera,Android 相機應用開發通用庫

OkCamera,Android 相機應用開發通用庫 轉載請宣告出處:http://blog.csdn.net/andrexpert/article/details/79302576     明天就可以回家過年了,有點小激動,於是乎趕緊寫篇文章壓壓驚!本文主要介紹最近

React-Native Android應用開發踩坑紀 ————windows環境下配置

歡迎轉載,轉載註明出處: 我不只是看客 自從在公司中被老大安利了移動開發的未來 React-Native之後開始關注相關,想嘗試相關app開發。正好畢業準備畢設,腦子一熱就選擇了RN來開發一款app……題目上交就不能改了,現在好後悔。。。但硬著頭皮上吧 ,廢

Android 開發 View.post() 的作用

1、在 onCreate() 方法中直接呼叫 view.getHeight() 會返回 0,但是可以在 view.post() 中獲取控制元件的寬高: view.post(new Runnable() { @Override

Android軟體開發應用程式之間的通訊介紹

Android 開發中在程式之間通訊的介面做的還是非常豐富的本例主要向大家介紹程式之間是如何進行溝通,有哪幾種溝通方式如何來實現溝通。 1.      使用handler傳遞訊息     handler 大家可以把它想象成主執行緒(UI執行緒)的一個子執行緒,它可以給主執

Android開發 view的幾種佈局方式及實踐

引言 通過前面兩篇: 我們對Android應用程式執行原理及佈局檔案可謂有了比較深刻的認識和理解,並且用“Hello World!”程式來實踐證明了。在繼續深入Android開發之旅之前,有必要解決前兩篇中沒有介紹的遺留問題:View的幾種佈局顯示方法,以後就不會在針對佈局方面做過多的介紹。View的佈局顯

OneNET麒麟座應用開發五:獲取加速度傳感器ADXL345數據

命令 多個 data lag 基本 采集 .cn 端口 成了 由於數據采集站基本都安裝在野外或者樓頂,安裝位置以及震動對檢測數據的準確性有一定影響。所以想要有一個位置狀態數據,正好發現麒麟作上有ADXL345,這樣一個數字輸出的加速度傳感器。如圖中紅框所示: 1、ADXL