相關(guān)概念
- px(像素):顯示器的圖像是由一個(gè)個(gè)肉眼分辨不出的發(fā)光點(diǎn)構(gòu)成的轮锥,這些發(fā)光點(diǎn)就叫做像素點(diǎn)(pixel)
- 分辨率:指的是顯示器所能顯示的像素有多少捐名。如400*600箩做,就是橫向400個(gè)像素點(diǎn)近忙,豎向600個(gè)像素點(diǎn)田晚。所以在尺寸固定的情況下嘱兼,分辨率越高,也就是單位面積內(nèi)能顯示的像素越多贤徒,圖像就越清楚
- dpi:每英寸(2.54)上存在的像素?cái)?shù)目遭京。計(jì)算公式為:根號(hào)下(長(zhǎng)的平方+寬的平方)除以屏幕尺寸。如400*600的屏幕泞莉,它的尺寸是4.5英寸哪雕,那么它的dpi就是160。
- dp(設(shè)備獨(dú)立像素):dp本身不隨著設(shè)備的改變而改變自身的大小鲫趁。1dp是個(gè)絕對(duì)值斯嚎,代表dpi為160時(shí)1個(gè)像素的點(diǎn)大小。如果dpi為320,那么1dp就等于2像素堡僻。
- density:代表屏幕密度糠惫,就是不同的屏幕1dp有幾個(gè)像素。從以上的概念可推導(dǎo)出density=dpi/160
從以上概念可以推導(dǎo)px=dp * density钉疫。這就是這個(gè)公式的推導(dǎo)過(guò)程硼讽,及為什么除以160的原因。
屏幕適配
以2個(gè)屏幕牲阁,分辨率都是400*600為例固阁,第一個(gè)屏幕dpi為160,第二個(gè)屏幕dpi為320城菊。那么一個(gè)寬為200dp的控件备燃,在屏幕1上剛好占橫向位置的一半。但是在第二個(gè)屏幕上就會(huì)占滿(mǎn)屏幕凌唬,因?yàn)榈诙€(gè)屏幕dpi是320,200dp=400像素并齐。這就造成了相同的分辨率相同的dp顯示出不同的效果。
那么讓同一個(gè)控件客税,在不變形的情況下在不同的屏幕上况褪,占比相同。如以上的例子更耻,第一個(gè)屏幕橫屏占滿(mǎn)测垛,那么第二個(gè)屏幕橫屏也要占滿(mǎn)。那么根據(jù)公式px=dp * density,dp一定的情況下酥夭,第二個(gè)屏幕占用的像素多少要改變赐纱,只能修改density。Android系統(tǒng)提供了getResources().getDisplayMetrics().density,可以對(duì)density進(jìn)行修改熬北,完成橫向的適配疙描。再根據(jù)寬高比,對(duì)高進(jìn)行適配讶隐。