相關(guān)概念
- px(像素):顯示器的圖像是由一個個肉眼分辨不出的發(fā)光點(diǎn)構(gòu)成的,這些發(fā)光點(diǎn)就叫做像素點(diǎn)(pixel)
- 分辨率:指的是顯示器所能顯示的像素有多少。如400*600,就是橫向400個像素點(diǎn),豎向600個像素點(diǎn)。所以在尺寸固定的情況下,分辨率越高,也就是單位面積內(nèi)能顯示的像素越多,圖像就越清楚
- dpi:每英寸(2.54)上存在的像素?cái)?shù)目。計(jì)算公式為:根號下(長的平方+寬的平方)除以屏幕尺寸。如400*600的屏幕,它的尺寸是4.5英寸,那么它的dpi就是160。
- dp(設(shè)備獨(dú)立像素):dp本身不隨著設(shè)備的改變而改變自身的大小。1dp是個絕對值,代表dpi為160時1個像素的點(diǎn)大小。如果dpi為320,那么1dp就等于2像素。
- density:代表屏幕密度,就是不同的屏幕1dp有幾個像素。從以上的概念可推導(dǎo)出density=dpi/160
從以上概念可以推導(dǎo)px=dp * density。這就是這個公式的推導(dǎo)過程,及為什么除以160的原因。
屏幕適配
以2個屏幕,分辨率都是400*600為例,第一個屏幕dpi為160,第二個屏幕dpi為320。那么一個寬為200dp的控件,在屏幕1上剛好占橫向位置的一半。但是在第二個屏幕上就會占滿屏幕,因?yàn)榈诙€屏幕dpi是320,200dp=400像素。這就造成了相同的分辨率相同的dp顯示出不同的效果。
那么讓同一個控件,在不變形的情況下在不同的屏幕上,占比相同。如以上的例子,第一個屏幕橫屏占滿,那么第二個屏幕橫屏也要占滿。那么根據(jù)公式px=dp * density,dp一定的情況下,第二個屏幕占用的像素多少要改變,只能修改density。Android系統(tǒng)提供了getResources().getDisplayMetrics().density,可以對density進(jìn)行修改,完成橫向的適配。再根據(jù)寬高比,對高進(jìn)行適配。