屏幕大小
1、不同的layout
Android手機屏幕大小不一,有480x320,640x360,800x480.怎樣才能讓App自動適應不同的屏幕呢? 其實很簡單,只需要在 res目錄下創建不同的layout文件夾,比如:layout-640x360,layout-800x480,所有的layout文件在編譯之后都會 寫入R.java里,而系統會根據屏幕的大小自己選擇合適的layout進行使用。
2、hdpi、mdpi、ldpi
之前的版本中,只有一個drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支持多分辨率。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
- drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
- drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480)
- drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320)
系統會根據機器的分辨率來分別到這幾個文件夾里面去找對應的圖片。在開發程序時為了兼容不同平台不同屏幕,建議各自文件夾根據需求均存放不同版本圖片。
屏幕方向
1、橫屏豎屏自動切換
可以在res目錄下建立layout-port和layout-land兩個目錄,里面分別放置豎屏和橫屏兩種布局文件,這樣在手機屏幕方向變化的時候系統會自動調用相應的布局文件,避免一種布局文件無法滿足兩種屏幕顯示的問題。
2、禁用自動切換
只需要在AndroidManifest.xml文件中加入android:screenOrientation屬性限制。
- Android:screenOrientation="landscape" //是限制此頁面橫屏顯示
- Android:screenOrientation="portrait" //是限制此頁面數豎屏顯示
字體自適應大小
方法1:
首先根據不同分辨率獲取不同字體大小。
在RES里創建
values-480x320/strings.xml 里面設置<dimen name="Text_size">30px</dimen>
和
values-800x400/strings.xml 里面設置<dimen name="Text_size">30px</dimen>
分別代表480X320 和 800X400分辨率情況下 字號為30px和40px;
在java文件中這樣調用
int sizeOfText = (int) this.getResources().getDimension(R.dimen.Text_size);
方法2:
在視圖的 onsizechanged里獲取視圖寬度,一般情況下默認寬度是320,所以計算一個縮放比率rate = (float) w/320 w是實際寬度
然后在設置字體尺寸時 paint.setTextSize((int)(8*rate)); 8是在分辨率寬為320 下需要設置的字體大小實際字體大小 = 默認字體大小 x rate
擴展知識:
PPI = Pixels per inch,每英寸上的像素數,即 "像素密度"
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
drawable-ldpi、drawable-mdpi、drawable-hdpi 精度分別為低、中(android默認)、高。
對應的圖片大小為:36x36、48x48、72x72。
xxhdpi: 144*144
xhdpi:96*96
hdpi:72*72
mdpi:48*48
ldpi:36*36
dp是虛擬像素,在不同的像素密度的設備上會自動適配,比如:
在320x480分辨率,像素密度為160,1dp=1px
在480x800分辨率,像素密度為240,1dp=1.5px
計算公式:1dp*像素密度/160 = 實際像素數
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi里面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi里面存放中等分辨率的圖片,如HVGA (320x480)
(3)drawable-ldpi里面存放低分辨率的圖片,如QVGA (240x320)
系統會根據機器的分辨率來分別到這幾個文件夾里面去找對應的圖片。
ppi的運算方式是:
PPI = √(長度像素數² + 寬度像素數²) / 屏幕對角線英寸數
dp:Density-independent pixels,以160PPI屏幕為標准,則1dp=1px,
dp和px的換算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。
sp:Scale-independent pixels,它是安卓的字體單位,以160PPI屏幕為標准,當字體大小為 100%時, 1sp=1px。
sp 與 px 的換算公式:sp*ppi/160 = px
總結得出:
px = dp*ppi/160
dp = px / (ppi / 160)
px = sp*ppi/160
sp = px / (ppi / 160)
dp = sp?