Android 系统当中各种尺寸单位的定义及使用
生活随笔
收集整理的這篇文章主要介紹了
Android 系统当中各种尺寸单位的定义及使用
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一,Android 各種標(biāo)尺單位的含義:
px:表示屏幕實(shí)際的象素。例如,320*480的屏幕在橫向有320個(gè)象素,在縱向有480個(gè)象素。pt:表示一個(gè)點(diǎn),是屏幕的物理尺寸。大小為1英寸的1/72。
in:表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手機(jī)屏幕大小,經(jīng)常說(shuō),3.2(英)寸、3.5(英)寸、4(英)寸就是指這個(gè)單位。這些尺寸是屏幕的對(duì)角線長(zhǎng)度。如果手機(jī)的屏幕是3.2英寸,表示手機(jī)的屏幕(可視區(qū)域)對(duì)角線長(zhǎng)度是3.2*2.54 = 8.128厘米。讀者可以去量一量自己的手機(jī)屏幕,看和實(shí)際的尺寸是否一致。
mm:表示毫米,是屏幕的物理尺寸。
常見(jiàn)的有 px(pixel) 與 pt(point) 兩種。
二,Android 中dp與sp標(biāo)尺單位的由來(lái)及計(jì)算方法:
由于Google對(duì)Android的開(kāi)放政策,使得所有廠商都可以加入到智能手機(jī)的研發(fā)中來(lái)。于是乎,Android手機(jī)一時(shí)間百花齊放,出現(xiàn)了各種不同的手機(jī)樣式。240*320 320*240 320*480 480*800 480*854 640*960 720*1280,……
屏幕物理尺寸3.2、3.5、3.75、4.0、4.3、5.0、7、9.3、10.1
為了更好的描述這種多樣化引發(fā)的問(wèn)題,我們需要引入一個(gè)新的概念density,也就是密度。它指的是在一定尺寸的物理屏幕上顯示像素的數(shù)量,一般使用dpi(dots per inch,每英寸像素?cái)?shù))作為單位。比如一臺(tái)分辨率為240x320,屏幕物理尺寸為1.5英寸x2英寸的手機(jī),他的密度可以用分辨率/尺寸,240/1.5或者320/2,密度為160dpi。對(duì)于用戶來(lái)說(shuō),密度越大的屏幕顯示效果越精細(xì),因?yàn)槊坑⒋顼@示的像素?cái)?shù)量更多。
如果是要使用px和pt給程序貼圖,假設(shè)生成了一條240px的直線,在240*320的屏幕上剛好可以鋪滿,而放到480x800的分辨率下才剛剛到一半的位置。
如果要解決這樣的問(wèn)題,那么程序在實(shí)現(xiàn)的時(shí)候就必須為每個(gè)分辨率都寫(xiě)一個(gè)配置,否則就會(huì)出現(xiàn)圖形在低密度的屏幕上顯示的更大,而在高密度的屏幕上顯示的更小。最麻煩的事情在于,一旦出現(xiàn)新的分辨率,所有程序都沒(méi)辦法直接運(yùn)行了。這明顯不符合手機(jī)快速發(fā)展的客觀規(guī)律。
為了解決這個(gè)問(wèn)題,Google為Android引入了一套新的單位dp和sp。
首先登場(chǎng)的是dp,Density Independent Pixel,可以翻譯為密度無(wú)關(guān)像素。和px相比,dp在不同密度的屏幕中實(shí)際顯示比例將保持一致。根據(jù)規(guī)定,一個(gè)dp相當(dāng)于160dpi屏幕中的一個(gè)px。在320dpi的屏幕中,一個(gè)dp相當(dāng)于2個(gè)px。通過(guò)這樣的成比例放縮,Android解決了需要多個(gè)不同屏幕中的大小顯示問(wèn)題。
具體而言,當(dāng)屏幕的的分辨率為320x480時(shí),無(wú)論實(shí)際的物理尺寸大小,密度都會(huì)被設(shè)置為160dpi,也就意味著這個(gè)設(shè)備上,一行最多可以放置320dp,而對(duì)于480x800的設(shè)備,只需屏幕尺寸在3寸到4.3寸之間,密度都會(huì)被設(shè)置為240dpi,一行同樣可以放置320dp。
因此在開(kāi)發(fā)中,用dp作為單位,只需要設(shè)置一次,就可以適配到多個(gè)屏幕上。
同樣,sp,scaled pixels,這個(gè)單位也采用了和dp同樣的設(shè)計(jì)理念,將需要獨(dú)立設(shè)置的pt轉(zhuǎn)化為可以自動(dòng)適配的sp,從而解決了文字的優(yōu)化顯示。
三,具體的 dpi(dot per inch每英寸像素?cái)?shù)) 計(jì)算方法:
譬如1280x720物理分辨率,5英寸大小的屏幕,其dpi 的計(jì)算方法是:sqrt(1280*1280+720*720)/5 = 293.72 dpi四,px 與 dp 的轉(zhuǎn)換方法:
譬如1280x720物理分辨率,5英寸大小的屏幕上,<dimen name="indicator_bar_width_large">54dp</dimen>這個(gè)高度如何轉(zhuǎn)換成 px 呢,計(jì)算方法是:54dp*293.72/160+0.5f = 99.6305px,約為 100px。 那么我們就可以給這個(gè)長(zhǎng)度去讓UI工程師提供切圖了。
import android.content.Context;??
public class DensityUtil {??
??
??? /**?
???? * 根據(jù)手機(jī)的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)?
???? */??
??? public static int dip2px(Context context, float dpValue) {??
??????? final float scale = context.getResources().getDisplayMetrics().density;??
??????? return (int) (dpValue * scale + 0.5f);??
??? }??
??
??? /**?
???? * 根據(jù)手機(jī)的分辨率從 px(像素) 的單位 轉(zhuǎn)成為 dp?
???? */??
??? public static int px2dip(Context context, float pxValue) {??
??????? final float scale = context.getResources().getDisplayMetrics().density;??
??????? return (int) (pxValue / scale + 0.5f);??
??? }??
}?
五,屏幕像素密度 dpi 分類:
譬如1280x720物理分辨率,5英寸大小的屏幕 需要對(duì)應(yīng)哪一種界面布局或者圖片資源呢?圖片資源有 drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi,drawable-xxhdpi,drawable-xxxhdpi(2K屏)等等
界面布局:layout-small,layout-normal,layout-mdpi,layout-hdpi,layout-xhdpi, 甚至還可以有 layout-480x854 這種特殊尺寸的布局
ldpi:low-dpi 低像素密度
mdpi:middle-dpi 中像素密度
hdpi:high-dpi 高像素密度
xhpi:extreame high-dpi 超高像素密度
可以查看下圖:
那么根據(jù)上面算出來(lái)的 293.72dpi 可以算為 xhdpi 超高像素密度了。
六,編程建議(如何做到自適應(yīng)屏幕大小):
1, 需要根據(jù)物理尺寸的大小準(zhǔn)備多套布局,layout(放一些通用布局xml文件,比如界面中頂部和底部的布局,不會(huì)隨著屏幕大小變化,類似windos窗口的title bar),layout-small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-hdpi(4英寸-7英寸之間),layout-xhdpi(7-10英寸之間)
2, 需要根據(jù)dpi值準(zhǔn)備5套圖片資源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi
? Android有個(gè)自動(dòng)匹配機(jī)制去選擇對(duì)應(yīng)的布局和圖片資源
????
3, 在XML布局,使用wrap_content和fill_parent來(lái)填充整個(gè)父窗口;
4, 使用FrameLayout的,而不是AbsoluteLayout,減少界面布局對(duì)屏幕大小的依賴;
5, 使用dp 來(lái)代替 px 作為圖片長(zhǎng)度單位;文字用 sp 代替 px 來(lái)作為字號(hào)大小;
6, 根據(jù)density 和 resolution 為不同的設(shè)備準(zhǔn)備合適的圖片資源,見(jiàn)上面第五條。
參考文獻(xiàn):
【1】dp和px,那些不得不吐槽的故事——Android平臺(tái)圖片文字元素單位淺析 ?http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html 【2】Android手機(jī)分辨率基礎(chǔ)知識(shí)(DPI,DIP計(jì)算)?http://blog.csdn.net/moruite/article/details/6028547 【3】Android中dp和px之間進(jìn)行轉(zhuǎn)換??http://blog.csdn.net/arui319/article/details/6777133 【4】Android中的長(zhǎng)度單位詳解(dp、sp、px、in、pt、mm)http://blog.csdn.net/nokiaguy/article/details/5509638 【5】Android屏幕密度(Density)和分辨率的解釋?http://www.apkbus.com/android-15796-1-1.html總結(jié)
以上是生活随笔為你收集整理的Android 系统当中各种尺寸单位的定义及使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 填满手机磁盘空间方法
- 下一篇: 如何通过网络连接进行ADB调试