剛開始,我開發時選取的模擬器是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來使用。
layout 是適配高解析度豎屏的布局檔案夾
layout-land 是適配高解析度橫屏的布局檔案夾
layout-land-320x240 是適配低解析度橫屏的布局檔案夾
layout-land-480x320 是適配中解析度橫屏的布局檔案夾
layout-port-320x240 是適配低解析度豎屏的布局檔案夾
layout-port-480x320 是適配中解析度豎屏的布局檔案夾
這樣布局檔案的適配就做完了。
我個人覺得先按照高解析度的模擬器開發效果比較好,然後去做各個不同解析度的適配。有時候我們布局時,低解析度的布局可能需要修改下。
[mw_shl_code=java,true]最後,還有一個問題如果是在java程式中寫死的布局怎麼辦?
這個就很惱火了,需要判斷螢幕的大小了,擷取螢幕大小的代碼如下:
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); [/mw_shl_code][mw_shl_code=java,true] 下面的程式碼片段是我自己在程式中寫死布局使用的,僅供參考:
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, android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); [/mw_shl_code]