Android屏幕密度與UI大小顯示

在調試產品的時候經常會遇到因爲LCD屏分辨率不一樣而導致UI顯示過大或過小的情況,修改了屬性系統中的變量ro.sf.lcd_density(device_base.mk),根據對應的屏幕增大或減小對應的值,問題一般都能解決。

在frameworks/base/core/java/android/util/DisplayMetrics.java文件中會去獲取這個屬性的值

public static final int DENSITY_DEVICE = getDeviceDensity();


private static int getDeviceDensity() {
        // qemu.sf.lcd_density can be used to override ro.sf.lcd_density
        // when running in the emulator, allowing for dynamic configurations.
        // The reason for this is that ro.sf.lcd_density is write-once and is
        // set by the init process when it parses build.prop before anything else.
        return SystemProperties.getInt("qemu.sf.lcd_density",
                SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));
    }


density表示顯示密度,表示每英寸有多少個顯示點,但是這個顯示點與分辨率中的像素點是不一樣的。

QVGA屏的density=120(兩個點對應一個分辨率),使用res/xxx-ldpi目錄下的資源

HGVA屏的density=160(三個點對應兩個分辨率),使用res/xxx-mdpi目錄下的資源(默認採用此目錄)

WVGA(800x480)屏的density=240(一個點對應一個分辨率),使用res/xxx-hdpi目錄下的資源


在應用程序界面設計時會用到這些概念

dip:  device independent pixels(設備獨立像素). 不同設備不同的顯示效果,這個和設備硬件有關,一般我們爲了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。

px:  pixels(像素)  屏幕上的點,不同設備不同的顯示屏顯示效果相同,這是絕對像素,是多少就永遠是多少不會改變。

根據不同的手機屏幕,UI實際佔據的像素計算公式 pixs = dips * (density/160)。這樣能解決UI適應手機屏幕大小的問題

所以根據google的推薦,像素統一使用dip,字體統一使用sp

sp:scaled pixels — best for text size (放大像素)(與刻度無關的像素):主要處理字體的大小。與dip類似,但是可以根據用戶的字體大小首選項進行縮放。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章