剛開始,我開發時選取的模擬器是WVGA854,其分辨率爲854*480。我開發完畢後裝在800*480的手機上時感受很OK,可是裝到480*320、以及320*240分辨率上的手機時,不少界面都變形了,這時我感覺到了app自適應的重要性。
自適應主要會遇到兩個大問題:橫屏和豎屏的切換,以及分辨率大小不一樣。
一.當橫屏切換成豎屏時,解決的辦法:
在res目錄下創建layout-port和layout-land兩個目錄,裏面分別放置豎屏和橫屏兩種佈局文件,當手機屏幕方向變化的時android系統會自動調用相應的佈局文件。
固然還有辦法就是不切換。要麼都是橫屏或者要麼都是豎屏。能夠在AndroidManifest.xml文件中設置,好比某個Activity設置爲android:screenOrientation="portrait" 這樣就一直保持豎屏,若是設置爲
android:screenOrientation="landscape" 這樣就一直保持橫屏。
二.當遇到分辨率不一樣大小時,咱們也會遇到三個問題:圖片大小、佈局、橫屏和豎屏的切換。
圖片問題好解決,到android2.0之後的api中,咱們會發現原先的drawable文件夾變成了3個分別是drawable-hdpi、drawable-mdpi、drawable-ldpi。
第一個文件夾放高分辨率手機的圖片,好比:854*480、800*480
第二個文件夾放中分辨率手機的圖片,好比:480*320
第三個文件夾放低分辨率手機的圖片,好比:320*240
關於佈局和橫屏切換成豎屏相似,也只須要在res目錄下建立不一樣的layout文件夾,好比layout-480x320,layout-800x480,系統會根據屏幕的大小本身選擇合適的layout來使用。
java
[mw_shl_code=java,true]最後,還有一個問題若是是在java程序中寫死的佈局怎麼辦?
這個就很惱火了,須要判斷屏幕的大小了,獲取屏幕大小的代碼以下:
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
int screenWidth = display.getWidth(); android
Button cancelBtn = new Button(this);
if (screenWidth<320 || screenHeight<320)
cancelBtn.setLayoutParams(new LayoutParams(60,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
else if (screenWidth <480 &&screenHeight == 480)
cancelBtn.setLayoutParams(new LayoutParams(80,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
else if (screenWidth >480 && screenHeight == 480)
cancelBtn.setLayoutParams(new LayoutParams(160,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT));
else
cancelBtn.setLayoutParams(new LayoutParams(120, api