Android-關於屏幕適配的一些經驗


剛開始,我開發時選取的模擬器是WVGA854,其分辨率為854*480。我開發完畢后裝在800*480的手機上時感覺很OK,但是裝到480*320、以及320*240分辨率上的手機時,很多界面都變形了,這時我感受到了app自適應的重要性。 

     自適應主要會遇到兩個大問題:橫屏和豎屏的切換,以及分辨率大小不同。 
     
     一.當橫屏切換成豎屏時,解決的辦法: 
     在res目錄下建立layout-portlayout-land兩個目錄,里面分別放置豎屏和橫屏兩種布局文件,當手機屏幕方向變化的時android系統會自動調用相應的布局文件。 
     當然還有辦法就是不切換。要么都是橫屏或者要么都是豎屏。可以在AndroidManifest.xml文件中設置,比如某個Activity設置為android:screenOrientation="portrait" 這樣就一直保持豎屏,如果設置為 
android:screenOrientation="landscape" 這樣就一直保持橫屏。 

     二.當遇到分辨率不同大小時,我們也會遇到三個問題:圖片大小、布局、橫屏和豎屏的切換。 

     圖片問題好解決,到android2.0以后的api中,我們會發現原先的drawable文件夾變成了3個分別是drawable-hdpidrawable-mdpidrawable-ldpi。 
     第一個文件夾放高分辨率手機的圖片,比如:854*480800*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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM