『壹』 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的規律。
好像說了不少廢話,哈哈,大概就這么多吧。
『貳』 鍗庝負騫蟲澘m610.8灞忓箷闀垮藉氬皯姣綾沖介暱瀹芥瘮錛
鏉跨數鑴戞墍璋撶殑8瀵革紝鎸囩殑鏄灞忓箷鐨勫昂瀵革紝鑰岄潪鎵嬫満鏁翠綋鏈哄櫒鐨勫昂瀵革紱 灞忓箷灝哄閲岀殑8瀵告寚鐨勬槸灞忓箷瀵硅掔嚎鐨勯暱搴︼紱 1瀵哥瓑浜2.54鍘樼背錛涢偅涔8瀵哥瓑浜20.32鍘樼背錛 濡傛灉鎯崇煡閬撳睆騫曢暱鍜屽界殑璇濆氨寰楃湅灞忓箷鐨勬瘮渚嬪昂瀵鎬簡銆 鎵浠ワ紝濡傛灉浣犵殑8瀵騫蟲澘鐢佃剳涓16錛9錛岄偅涔堝睆騫曢暱瀹藉垎鍒涓20.32鍘樼背鍜12.1鍘樼背銆傦紙甯屾湜鑳藉府鍒頒綘錛佹湜閲囩撼錛佽阿璋錛侊級
韜鐨勬濊&瀹炶返
緇欎綘甯︽潵涓縐嶅叏鏂般佸叏闈㈣岄昏緫娓呮櫚鐨凙ndroid灞忓箷閫傞厤鎬濊礬錛屽彧瑕佷綘璁ょ湡闃呰伙紝淇濊瘉浣犺兘瑙e喅Android鐨勫睆騫曢傞厤闂棰橈紒
鐩褰
Android灞忓箷閫傞厤瑙e喅鏂規.png
瀹氫箟
浣垮緱鏌愪竴鍏冪礌鍦ˋndroid涓嶅悓灝哄搞佷笉鍚屽垎杈ㄧ巼鐨勬墜鏈轟笂鍏峰囩浉鍚岀殑鏄劇ず鏁堟灉
鐩稿叧閲嶈佹傚康
灞忓箷灝哄
鍚涔夛細鎵嬫満瀵硅掔嚎鐨勭墿鐞嗗昂瀵
鍗曚綅錛氳嫳瀵革紙inch錛夛紝1鑻卞=2.54cm
Android鎵嬫満甯歌佺殑灝哄告湁5瀵搞5.5瀵搞6瀵哥瓑絳
鎴戜釜浜虹敤浜嗚繖涓騫蟲澘宸茬粡宸涓嶅氫簲涓鏈堜簡錛屾垜鏄鍦19騫村浗搴嗚妭鏃跺欎拱鐨勶紝瀹炰綋搴楅噷涔扮殑榪橀佷簡涓涓鍗庝負鐨勮摑鐗欓煶綆憋紝4鍔128g鍏ㄧ綉閫氱増鏈鐨3499鍏冧拱鐨勶紝 鎴戜篃綆楁槸鏈変簡涓涓鍗庝負鍗婁釜鍏ㄥ舵《鐨勭敤鎴蜂簡錛屼竴閮鑽h10鎵嬫満錛屼竴涓鑽h鎵嬬幆錛屼竴涓騫蟲澘錛屼竴涓鍗庝負钃濈墮闊崇 IMG_20200229_150051.jpg
鎴戜滑鐜板湪榪涘叆姝i
棣栧厛鏄娌℃湁寰淇HD榪欏氨寰堜笉鏂逛究錛屾墜鏈哄拰騫蟲澘涓嶈兘鍚屾椂鐧誨綍錛屽彧鏈塓QHD錛岃屼笖QQHD鐗堟湰寰堣佷竴鐩存病鏈夊幓鏇存柊錛屽緢澶鍔炲叕杞浠涔熸槸鐗堟湰閮藉緢鑰侀噷闈㈠箍鍛婃弧澶╅烇紝瑕佷箞灝辨槸涓嶉傞厤錛岃繕鏈夊氨鏄妗岄潰鐨勫佺焊絝栫潃鏄涓涓鏍鳳紝妯鐫涓嶆槸鏀懼ぇ灝辨槸妯$硦鐨勪笉琛岋紝榪欐槸騫蟲澘鎴鍥劇殑錛屼紶鍒版墜鏈轟笂闈涓婁紶鍑烘潵鐨 Screenshot_20200229_144712_com.huawei.android.launcher.jpg Screenshot_20200229_144700_com.huawei.android.launcher.jpg
鎺ョ潃鏄閿鐩橈紝絝栫潃榪樺ソ錛屾í鐫灝辨槸鎷変幾鏀懼ぇ錛屾寜閿澶х殑澶稿紶錛屽竷灞涓嶆槸寰堝ソ錛屽備笅鍥撅紝鐪熺殑灝卞儚涓涓灞忓箷澶т竴鐐圭殑瀹夊崜鎵嬫満錛 Screenshot_20200229_144748_com.huawei.android.launcher.jpg Screenshot_20200229_144735_com.huawei.android.launcher.jpg 榪樻湁灝辨槸榪欎釜鍣卞ご 鐢佃剳妯″紡
鐪嬩技寰堝己錛屽疄鍒欏氨鏄涓涓綆綰︾増鐨勭數鑴戞岄潰錛屼笉鑳芥斁澶у叏灞忓幓鐪嬶紝灝卞彧鑳芥敮鎸佸氬紑錛屼笅闈㈠氨鏄鐢佃剳妯″紡鍏ㄥ睆鏈澶ц傜湅灝辮繖涓錛屽皬灝忕殑涓鐐箈swl錛屾墍浠ヨ繕鏄鍒鐢ㄧ數鑴戞ā寮忚拷鍓э紝浣曡皥鐢熶駭鍔涳紝
鍚庢倲褰撴椂涓嶅惉鏈嬪弸璇濅拱iPad錛屾渶榪戞墦綆闂查奔鎴栬呭叾浠朅PP鍗栦簡鎹iPad錛屽氨娌℃湁寰淇HD鎴戝氨涓嶅枩嬈錛岀劧鍚庢槸鍚逛笂澶╃殑鍥涘0閬撳枃鍙鐪熸病鎰熻夊埌闊寵川鏈夊氬ソ錛岃繕鏈変粈涔鏉滄瘮鍏ㄦ櫙澹伴煶鏁堢畻浜嗗惂銆 IMG_20200229_152925.jpg IMG_20200229_152609.jpg IMG_20200229_152421.jpg
灞忓箷鍒嗚鯨鐜
『叄』 Android 中8dp是多少毫米
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。如果你拿這兩部手機放在一起對比,會發現這個圖片的物理尺寸「差不
多」,
『肆』 android屏幕適配做哪幾個尺寸
android屏幕適配尺寸有全屏模式、4:9、8:12多種。
android屏幕適配尺寸有多種,具體的要結合自己的興趣愛好和手機的自身的實際情況,具體設置標准如下:
1、不要使用絕對布局,這會限制你的手機屏幕的更換。
2、盡量使用match_parent ,從而保證屏幕的最大化利用。
3、盡量使用權重(android:layout_weight),保持手機屏幕合理布局。
4、盡量使用android的shape 自定義,形成純色背景。
5、可以在res目錄上新建layout-HxW.xml的文件夾進行在特定解析度下適配。
拓展資料:
由於筆記本電腦採用的液晶屏的大小和解析度是根據它的市場定位決定的,所以為了適應不同人群的消費能力和使用習慣,筆記本電腦的液晶顯示器的尺寸和解析度種類遠遠要比台式液晶顯示器多。