1. 程式人生 > >dp,px,pt,sp 的區別 以及dp 和 px 互轉

dp,px,pt,sp 的區別 以及dp 和 px 互轉

dp = dip : device independent pixels(裝置獨立畫素). 不同裝置有不同的顯示效果,這個和裝置硬體有關,一般我們為了支援WVGA、HVGA和QVGA 推薦使用這個,不依賴畫素。

px: pixels(畫素). 不同裝置顯示效果相同,一般我們HVGA代表320x480畫素,這個用的比較多。

pt: point,是一個標準的長度單位,1pt=1/72英寸,用於印刷業,非常簡單易用;

sp: scaled pixels(放大畫素). 主要用於字型顯示best for textsize。

由此,根據 google 的建議,TextView 的字號最好使用 sp 做單位,而且檢視

TextView


的原始碼可知 Android 預設使用 sp 作為字號單位。

在 Android 中,  1pt 大概等於 2.22sp

以上供參考,如果 UI 能夠以 sp 為單位提供設計是最好的,如果設計中沒有 sp

的概念,則開發人員也可以通過適當的換算取近似值。

過去,程式設計師通常以畫素為單位設計計算機使用者介面。例如,定義一個寬度為300畫素的表單欄位,列之間的間距為5個畫素,圖示大小為16×16畫素 等。這樣處理的問題在於,如果在一個每英寸點數(dpi)更高的新顯示器上執行該程式,則使用者介面會顯得很小。在有些情況下,使用者介面可能會小到難以看清 內容。


與解析度無關的度量單位可以解決這一問題。Android支援下列所有單位。


px(畫素):螢幕上的點。

in(英寸):長度單位。

mm(毫米):長度單位。

pt(磅):1/72英寸。

dp(與密度無關的畫素):一種基於螢幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。

dip:與dp相同,多用於android/ophone示例中。

sp(與刻度無關的畫素):與dp類似,但是可以根據使用者的字型大小首選項進行縮放。

為了使使用者介面能夠在現在和將來的顯示器型別上正常顯示,建議大家始終使用sp作為文字大小的單位,將dip作為其他元素的單位。當然,也可以考慮使用向量圖形,而不是用點陣圖

------------------------------------------------------------------------------------

    • dp:A dp is a density-independent pixel that corresponds to the physical size of a pixel at 160 dpi(dots per inch:每英寸點數). 
      • dp也就是dip:device independent pixels(裝置獨立畫素)
      • dp是一種與密度無關的畫素單位,在每英寸160點的螢幕上,1dp = 1px
      • 不同裝置有不同的顯示效果,這個和裝置硬體有關,一般我們為了支援WVGA、HVGA和QVGA 推薦使用這個,不依賴畫素
  1. <Buttonandroid:layout_width="wrap_content"
  2.     android:layout_height="wrap_content"
  3.     android:text="@string/clickme"
  4.     android:layout_marginTop="20dp"/>


  • sp: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 (but never for layout sizes).
    • scaled pixels(刻度畫素). 主要用於定義字型的大小,而從來不再layout上使用
      1. <TextViewandroid:layout_width="match_parent"
      2.     android:layout_height="wrap_content"
      3.     android:textSize="20sp"/>
  • px:pixels(畫素). 不同裝置顯示效果相同,一般我們HVGA代表320x480畫素,這個用的比較多

總結:dp也就是dip。這個和sp基本類似。如果設定表示長度、高度等屬性時可以使用dp或sp。但如果設定字型,需要使用sp。dp是與密度無關,sp除了與密度無關外,還與scale無關。如果螢幕密度為160,這時dp和sp和px是一樣的。1dp=1sp=1px,但如果使用px作單位,如果螢幕大小不變(假設還是3.2寸),而螢幕密度變成了320。那麼原來TextView的寬度設成160px,在密度為320的3.2寸螢幕裡看要比在密度為160的3.2寸螢幕上看短了一半。但如果設定成160dp或160sp的話。系統會自動將width屬性值設定成320px的。也就是160 * 320 / 160。其中320 / 160可稱為密度比例因子。也就是說,如果使用dp和sp,系統會根據螢幕密度的變化自動進行轉換.

附:px 和 dp 互轉換

  1. package com.hujl.util;
    import android.content.Context;  
      
    public class DensityUtil {  
      
        /** 
         * 根據手機的解析度從 dp 的單位 轉成為 px(畫素) 
         */  
        public static int dip2px(Context context, float dpValue) {  
            final float scale = context.getResources().getDisplayMetrics().density;  
            return (int) (dpValue * scale + 0.5f);  
        }  
      
        /** 
         * 根據手機的解析度從 px(畫素) 的單位 轉成為 dp 
         */  
        public static int px2dip(Context context, float pxValue) {  
            final float scale = context.getResources().getDisplayMetrics().density;  
            return (int) (pxValue / scale + 0.5f);  
        }  
    }  

相關推薦

JAXB實現XMLjava物件以及soapXml物件需要注意的地方

public class JaxbXmlUtil { private static final String DEFAULT_ENCODING = "UTF-8"; /** * pojo轉換成xml 預設編碼UTF-8 */ public static

Java PPT為圖片、PDF、SVG、XPS、ODP以及PPTPPTX

同一文件,在不同的文件檢視器或者編譯環境中,需要對該文件進行相應的格式轉換。下面的內容中,將介紹通過Java程式設計來實現PPT文件格式轉換的方法。 使用工具: Spire.Presentation for Java IntelliJ IDEA   Jar檔案獲取及匯入: 方法1

dp,px,pt,sp區別 以及dp px

dp = dip : device independent pixels(裝置獨立畫素). 不同裝置有不同的顯示效果,這個和裝置硬體有關,一般我們為了支援WVGA、HVGA和QVGA 推薦使用這個,不依賴畫素。px: pixels(畫素). 不同裝置顯示效果相同,一般我們H

普通集合泛型集合的區別,哈希表字典表的區別,隊列堆棧的區別以及棧的區別

ear 釋放內存 main 廣泛 棧內存 節點 except {0} 常數 普通集合和泛型集合的區別: 泛型集合與傳統集合相比 類型更安全. 泛型集合無需裝箱拆箱操作. 泛型的重要性. 泛型是未來五年的主流技術 ...通常情況下,建議您使用泛型集合,因為這樣可以獲得類型安全

移動端適配方案以及rempx之間的轉換

場景 adding 區間 tin 每一個 left ios7 分辨率 user 背景 開發移動端H5頁面 面對不同分辨率的手機 面對不同屏幕尺寸的手機 視覺稿 在前端開發之前,視覺MM會給我們一個psd文件,稱之為視覺稿。 對於移動端開發而言,為了做到頁面高

displayvisibility的區別以及迴流重繪

display:none會脫離文件流,不佔據頁面空間; visibility:hidden,只是隱藏內容,並沒有脫離文件流,會佔據頁面的空間。 講述迴流以及重繪之前需要先了解頁面在文件載入完成之後到完全顯示中間的過程: 1.根據文件生成DOM樹(包括display:none的節點) 2.在D

==equals方法的區別以及IntegerString的應用

==和equals方法的區別以及Integer和String的應用 == 比較的是兩個物件的地址記憶體地址,而equals比較的是兩個物件的值。 例如String的equals比較方法,先呼叫==判斷是否相同,然後再判斷物件value的char陣列是否相同。 建議:比較兩個物件是否相

掛起阻塞區別以及sleepwait的區別

阻塞 VS 掛起 阻塞與掛起都是程序的狀態,但他們有一些相似之處,也有一些區別,下面先對他們進行概述,再進行比較 阻塞:正在執行的程序由於發生某時間(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行。此時引起程序排程,OS把處理機分配給另一個就緒程序,而讓受阻程序處於暫停狀態,一般將這種狀態

runnablethread的區別以及runstart的區別(多執行緒)

在java中可有兩種方式實現多執行緒,一種是繼承Thread類,一種是實現Runnable介面;Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多執行緒操作了,但是一個類只能繼承一個父類,這是此方法的

splitblock的區別以及maptaskreducetask個數設定

split和block的區別: 很多人可能認為在hadoop中的split和block是一樣的,可能是因為hadoop在預設情況下split的大小和hdfs檔案分塊大小是一樣而被誤導吧。 下面來談談他們的區別和聯絡: 1.split是mapreduce

字串字元陣列的區別以及sizeofstrlen的區別

一、sizeof     sizeof是運算子,其值在編譯時即計算好了,引數可以是陣列、指標、型別、物件、函式等。它的功能是:獲得保證能容納實現所建立的最大物件的位元組大小。     由於在編譯時計算,因此sizeof不能用來返回動態分配的記憶體空間的大小。實際上,用sizeof來返回型別以及靜態分配的物件、

Verilog中 regwire 用法區別以及alwaysassign的區別

1、從模擬角度來說,HDL語言面對的是編譯器,相當於使用軟體思路,此時: wire對應於連續賦值,如assign; reg對應於過程賦值,如always,initial; 2、從綜合角度,HDL語言面對的是綜合器,相當於從電路角度來思考,此時: wi

login shellnologin shell的區別以及susu

Login shell與nologin shell的區別 說下定義,其實很好理解。Login shell就是你進入shell是需要輸使用者名稱密碼的,比如你啟動圖形介面最後一步需要你輸入使用者名稱密碼,只有你輸入正確,才能進入桌面,這進入的就是一個login shell。另

%d 跟%i 的區別以及scanfsscanf的用法

scanf 用%i能夠獲得8/16進位制的值, 比如0011就是9,0x11就是17,當然如果讀取到08或者09就會出錯了。 scanf簡介 scanf函式,與printf函式一樣,都被定義在裡,因此在使用scanf函式時要加上#include<stdio.h>

find命令、文件名後綴以及LinuxWindows傳文件

二周第五次課find命令文件查找:1.which(一般用於查找命令的絕對路徑)2.whereis(不常用)3.locate(非實時查找,基於預先定義的數據庫。模糊查找,查找速度快。使用前要先安裝這個命令yum -y install mlocate,而且每次使用前最好更新數據庫updatedb)locate -

Swift JSON字符串字典以及數組的

get pri 字符 from span try div containe nss 1、JSONString轉換為字典 // JSONString轉換為字典 func getDictionaryFromJSONString(jsonString:Str

wchar_t* char*

multi pan com nic return compose ide acp 轉化 //將單字節char*轉化為寬字節wchar_t* wchar_t* AnsiToUnicode(const char* szStr){ int nLen = MultiByte

C++ UTF8UTF16代碼

define iter 般的 != ont for efault 互轉 小端 簡介 1、這段代碼只考慮在小端序情況下的轉換(一般的機器都是的)。2、這段代碼需要C++11的支持(只是用到了u16string),如果不支持,可以添加下面代碼 typedef uin

Python list str

pytho str 輸出 互轉 div python post 字符串 pri 一、list轉字符串 命令:‘‘.join(list)其中,引號中是字符之間的分割符,如“,”,“;”,“\t”等等如:list = [1, 2, 3, 4, 5]‘‘.join(list)

DOM對象jQuery

scrip jquery 兩種 通過 需要 tel dom ron blog 一、jQuery對象轉成DOM對象: 兩種轉換方式將一個jQuery對象轉換成DOM對象:[index]和.get(index); (1)jQuery對象是一個數據對象,可以通過[index]的方