Android屏幕大小適配問題解決



1、一些基本概念

一、長度(真實長度):英寸、inchsql

二、分辨率:density 每英寸像素數  dpi(密度)eclipse

三、像素:px佈局

四、dip的公式:px /dip=dpi/160  因此 dip 相似於英寸、長度(dp=dip,sp相似於dip)  dip=160*inchpost

dip= 160/dpi * pxthis

當dip必定時。dpi 越大,px就越大spa

五、廣義分辨率=長px*寬px.net

2、常常使用規律

一、平時咱們說 手機的分辨率是 320*480的,事實上的這裏的分辨率是相對分辨率

意思是:水平方向上的像素數是320,垂直方向上像素數是480,code

分辨率是160(默認是160,意思是每英寸像素數160)blog

那麼水平方向:320 /160=2英寸圖片

垂直方向:480/160=3英寸

因而乎 屏幕對角線 是根號下4*9=3.6(這就是常說的3.6英寸屏幕)


二、說一個手機的屏幕參數有三個:長寬像素之積(相對分辨率)、真實分辨率(dpi)、對角線長度


三、模擬器的分辨率都是160,因此像素越大。屏越大


四、l、m、h 三個目錄是按 真是分辨率dpi 來相應找文件的。


五、有三種方案解決屏幕適配

(1)按像素比      y/開發時用的屏幕像素=x/用戶設備像素

(2)按長度        用dip(若是屏幕尺寸基本不變)

(3)按密度        放在l、m、h目錄(若是屏幕尺寸基本不變,dpi越大 px越大)

六、假設手機是hdpi,但hdpi裏沒有東西。l裏有東西,程序就會去l裏找圖片並且把它按比例放大。


七、最全的辦法:單獨適配

屏幕分辨率:1024x600
density:1(160)
目錄:values-mdpi-1024x600

屏幕分辨率:1024x600
density:1.5(240)
目錄:values-hdpi-683x400  由1024/1.5  600/1.5獲得,需要四捨五入。

屏幕分辨率:800x480
density:1(160)
目錄:values-mdpi-800x480

屏幕分辨率:800x480
density:1.5(240)
目錄:values-hdpi-533x320  由800/1.5  480/1.5獲得。需要四捨五入。

以此類推
普通狀況下需要建立出values 、values-mdpi 、 values-hdpi目錄,以備在一些沒有規定的尺寸屏幕上找不到資源的狀況。


八、個人原則,能用拉伸圖片的就拉伸、能用相對佈局的就用相對佈局、能用代碼計算寬度就代碼計算。


讓美工出一份  1080*1920 放到XXH

佈局時依照:寬:320dip 高 480 dip


九、主流機型參數:

比例
0.75
1
1.5
2
3
最多見的像素長寬
240
320
480
640*960
960*1440
dpi
~120
~160
~240
~320
~480
目錄
L
M
H
XH
XXH
主流機



720*1280 (紅米、s三、 note2 )
720*1280(米2) 1080*1920(米三、note三、s4)


1dp
=1px

1dp
=2px
1dp
=3px
主流機



note二、紅米、s3 米二、米三、s四、note3


ldpi Resources for low-density (ldpi) screens (~120dpi).
mdpi Resources for medium-density (mdpi) screens (~160dpi). (This is the baseline density.)
hdpi Resources for high-density (hdpi) screens (~240dpi).
xhdpi Resources for extra high-density (xhdpi) screens (~320dpi).


----------------------------------------------------------------

紅米:


屏幕分辨率爲:720 * 1280

絕對寬度:720pixels

絕對高度:1280pixels

邏輯密度:2.0

X 維 :294.96774像素每英尺

Y 維 :285.193像素每英尺


res/drawable下的文件會作失真壓縮

res/drawable-nodpi下的文件不作不論什麼處理


=================================

十、獲取屏幕像素的方法

String str = "";

        DisplayMetrics dm = new DisplayMetrics();

        dm = this.getApplicationContext().getResources().getDisplayMetrics();

        int screenWidth = dm.widthPixels;

        int screenHeight = dm.heightPixels;

        float density = dm.density;

        float xdpi = dm.xdpi;

        float ydpi = dm.ydpi;

        str += "屏幕分辨率爲:" + dm.widthPixels + " * " + dm.heightPixels + "\n";

        str += "絕對寬度:" + String.valueOf(screenWidth) + "pixels\n";

        str += "絕對高度:" + String.valueOf(screenHeight)

                + "pixels\n";

        str += "邏輯密度:" + String.valueOf(density)

                + "\n";

        str += "X 維 :" + String.valueOf(xdpi) + "像素每英尺\n";

        str += "Y 維 :" + String.valueOf(ydpi) + "像素每英尺\n";

        L.i(str);


2
0
 
 
相關文章
相關標籤/搜索