Android屏幕適配dp、px兩套解決辦法


“又是屏幕適配,這類文章網上不是很多了嗎?”

我也很遺憾,確實又是老問題。但本文重點對網上的各種方案做一個簡短的總結,和具體使用方法。

若想了解具體Android設備適配的前世因果,請閱讀hongyang文章:http://blog.csdn.NET/lmj623565791/article/details/45460089

 

據我的總結,屏幕適配可以有兩種方法適配,dp和px,一一講解。

 

一、PX適配。

現在常用的屏幕尺寸為1280x720,一般美工也會根據這個尺寸給圖。

圖上標注的都是px,而android里面推薦使用的單位為dp。

相同的屏幕尺寸,不同的密度比例,可能會要用到不同的dp值。

這個轉換很痛。

 

那么,省着點吧,對於1280x720的屏幕,我們若給寬度為720px是不是就占滿屏幕了呢?對於1920x1080的屏幕,我們寬度給1080是不是就占滿了你?

我們以1280x720為基准,把所有的寬度切成720份,高度切成1280份,其他的尺寸基於這個基准等比縮放。。。。。這么鬧嗑真費勁,看圖

對於1280x720的屏幕,寬度給x720變量的值即占滿屏幕。

萬一用戶的手機屏幕為800x480呢?看下圖:

萬一是1920x1080呢?看圖:

understand?根據不同的屏幕,x720變量會代表對應的px值,其他的變量也一樣。dimens_y.xml文件也一樣的等分了。

往下看

 

如上圖,根據你的需要,生成需要適配的尺寸的文件,手機會根據屏幕相關參數自動尋找合適的尺寸文件的。需要執行生成適配文件夾時,找到screenMatchPX.bat文件所在的硬盤位置,雙擊執行該文件即可,即可在項目的res目錄下生成對應的values-aaaxbbb文件夾和里面的文件數據。

screenMatchPX.jar里面的源碼,文末我會提供的,jar文件的打包也沒什么神秘的,去eclipse試試就知道了。

screenMatchPX.bat內容:

 

[html]  view plain copy
  1. java -jar %~dp0\screenMatchPX.jar 720 1280  
  2. pause  


也可以寫成

 

 

[html]  view plain copy
  1. java -jar 路徑\screenMatchPX.jar 720 1280  
  2. pause  


如果不了解批處理知識的,干脆別折騰了,直接用。但后面跟的參數要注意,看源碼:

 

 

[html]  view plain copy
  1. public static void main(String[] args) {  
  2.         System.out.println("開始運行...");  
  3.         //基准寬高  
  4.         int baseW = 720;  
  5.         int baseH = 1280;  
  6.         String addition = "";  
  7.         try {  
  8.             if (args.length == 1) {  
  9.                 addition = args[0];  
  10.             } else if (args.length == 2) {  
  11.                 baseW = Integer.parseInt(args[0]);  
  12.                 baseH = Integer.parseInt(args[1]);  
  13.             } else if (args.length >= 3) {  
  14.                 baseW = Integer.parseInt(args[0]);  
  15.                 baseH = Integer.parseInt(args[1]);  
  16.                 addition = args[2];  
  17.             } else {  
  18.                 System.out.println("沒有發現輸入參數...");  
  19.             }  
  20.         } catch (NumberFormatException e) {  
  21.             System.err.println("right input params : java -jar xxx.jar baseW baseH w,h;w,h;...;w,h;");  
  22.             e.printStackTrace();  
  23.             System.exit(-1);  
  24.         }  
  25.         new GenerateValueFiles(baseW, baseH, addition).generate();  
  26.     }  


默認基准值為,1280x720,

 

默認適配屏幕為

 

[html]  view plain copy
  1. "320,480;480,800;480,854;540,888;600,1024;720,1184;720,1196;720,1280;768,1024;768,1280;800,1280;1080,1812;1080,1920;1440,2560;";  



 

如果你覺得不合適就在參數行更改。

注意參數格式:

 

[html]  view plain copy
  1. java -jar xxx.jar 基准width 基准height 待適配w,待適配h;待適配w,待適配h;待適配w,待適配h;  

[html]  view plain copy
  1. java -jar xxx.jar 基准width 基准height  

[html]  view plain copy
  1. java -jar xxx.jar 待適配w,待適配h;待適配w,待適配h;待適配w,待適配h;  

 

 

搞定,會用這個bat批處理,生成對應的尺寸文件,在代碼里面設置按鈕的寬度為@dimens_x/x720 ,則在任何手機上都會是橫向全屏的。

 

有一點坑,就是你需要獲取待適配的手機的像素值,不要看網上的說明參數,需要看程序運行的參數值。

我踩的坑:我的測試機聯想A880,查閱屏幕參數為960x540,於是我加進去了。然后在程序中測試發現,失陪效果不好。

經過測試發現,它用的是800x480的尺寸文件。糾結很久發現程序能得到的屏幕尺寸其實為888x540,然后修改后重新生成values文件,才正常。

 

若你獲取到的屏幕像素參數為 1283.45 x 724.89,那就取 1283x724,不要四舍五入了。

 

總結:

此方法,你需要做的是:

1、把screenMatchPX.bat和screenMatchPX.jar兩個文件拷貝到你項目的main目錄下;

2、修改screenMatchPX.bat文件中你需要適配的屏幕參數;

3、進到screenMatchPX.bat文件所在的硬盤位置,雙擊執行。執行是不要在AS里面雙擊,AS不可執行bat文件。

over

二、DP適配。

dp適配原理和上面px適配一樣,只不過是拿dp值來等比縮放的而已。

 

無論手機屏幕的像素多少,密度比值多少,但80%的手機的dp值(widthPixels / density)都為360dp,所以對於這些手機,我們以360dp為基准,即只要寫@dimen/dp_360即可讓控件橫向沾滿屏幕。那萬一有些手機的這個值是520dp怎么辦呢?加進去生成對應的values即可了。

screenMatchDP.bat里面的代碼為:

 

[html]  view plain copy
  1. java -jar %~dp0\screenMatchDP.jar 360 384 400 411 533 640 720 768 820  
  2. pause  


默認第一個為基准項,360dp。

 

后面跟的都是你需要適配的dp值,即某款手機的widthPixels / density比值。

如果你不跟參數,程序默認的參數為:

 

[html]  view plain copy
  1. args = new String[]{"360", "384", "400", "411", "533", "640", "720", "768", "820"};  

 

在程序的默認values文件夾中需要一份dimens.xml文件:

 

[html]  view plain copy
  1. <resources>  
  2.     <!-- Default screen margins, per the Android Design guidelines. -->  
  3.     <dimen name="activity_horizontal_margin">16dp</dimen>  
  4.     <dimen name="activity_vertical_margin">16dp</dimen>  
  5.       
  6.     <dimen name="dp_m_60">-60dp</dimen>  
  7.     <dimen name="dp_m_30">-30dp</dimen>  
  8.     <dimen name="dp_m_20">-20dp</dimen>  
  9.     <dimen name="dp_m_10">-10dp</dimen>  
  10.     <dimen name="dp_m_5">-5dp</dimen>  
  11.     <dimen name="dp_0.1">0.1dp</dimen>  
  12.     <dimen name="dp_0.5">0.5dp</dimen>  
  13.     <dimen name="dp_1">1dp</dimen>  
  14.     <dimen name="dp_2">2dp</dimen>  
  15.     <dimen name="dp_2.5">2.5dp</dimen>  
  16.     <dimen name="dp_3">3dp</dimen>  
  17.     ...........  
  18.     <dimen name="dp_370">370dp</dimen>  
  19.     <dimen name="dp_402">402dp</dimen>  
  20.     <dimen name="dp_410">410dp</dimen>  
  21.     <dimen name="dp_422">422dp</dimen>  
  22.     <dimen name="dp_472">472dp</dimen>  
  23.     <dimen name="dp_500">500dp</dimen>  
  24.     <dimen name="dp_600">600dp</dimen>  
  25.     <dimen name="dp_640">640dp</dimen>  
  26.   
  27.     <dimen name="sp_6">6sp</dimen>  
  28.     <dimen name="sp_7">7sp</dimen>  
  29.     <dimen name="sp_8">8sp</dimen>  
  30.     <dimen name="sp_9">9sp</dimen>  
  31.     <dimen name="sp_10">10sp</dimen>  
  32.     <dimen name="sp_11">11sp</dimen>  
  33.     ......  
  34.     <dimen name="sp_19">19sp</dimen>  
  35.     <dimen name="sp_20">20sp</dimen>  
  36.     <dimen name="sp_21">21sp</dimen>  
  37.     <dimen name="sp_22">22sp</dimen>  
  38.     <dimen name="sp_24">24sp</dimen>  
  39.     <dimen name="sp_28">28sp</dimen>  
  40.     <dimen name="sp_38">38sp</dimen>  
  41.     <dimen name="sp_40">40sp</dimen>  
  42.     <dimen name="sp_41">41sp</dimen>  
  43.     <dimen name="sp_48">48sp</dimen>  
  44. </resources>  



 

需要負的dp,就寫負數的item。有字體的適配。

 

程序里面會先讀取上面的這個默認dimens.xml文件,然后根據需要適配的dp值生成對應的dimens.xml文件。

萬一哪天你發現沒有你想要的item,比喻888dp。那你就在默認的values中的dimens.xml中添加888dp,然后重新執行bat文件生成新的數據即可。

美工給圖的時候最好是1280x720的圖,這樣的話,拿到寬度的值直接除以2,代碼里面寫成@dimen/dp_360即可。方便計算。


總結:

此方法,你需要做的是:

1、默認的values文件夾中需要一份特定的dimens.xml文件。文末提供下載

2、把screenMatchDP.bat和screenMatchDP.jar兩個文件拷貝到你項目的main目錄下;

3、修改screenMatchDP.bat文件中你需要適配的屏幕dp參數;

4、進到screenMatchDP.bat文件所在的硬盤位置,雙擊執行。執行是不要在AS里面雙擊,AS不可執行bat文件。

OVER

 

源碼圖:

dp目錄是dp方式適配的源代碼。

px目錄是hongyang提供的px適配源代碼。

MainActivity類中有獲取屏幕參數和dp參數的代碼。

根據你的需要,自己修改和定制程序吧。

阿杜提供,放心盜版。

 

以上兩種方法大概原理和使用方法都介紹完了,你可以實驗。dp的方法我們已經應用到項目中了,沒問題。px的方式只是測試過,沒有應用。

dp方法的缺點:如果沒有默認的dimens.xml,那就黃昏依斜陽了,還好有提供。優點是,沒有枚舉全部的item,可以省一些apk空間;有字體sp的適配。

px方法的缺點:屏幕px的種類遠多於dp的種類,文件數量多;程序for循環枚舉item項,有部分用不上的px項;width和height都適配了,給控件寫width尺寸時要用dimens_x.xml里面的變量值,寫height尺寸時需要用dimens_y.xml里面的變量值。

 

下載地址:http://download.csdn.net/detail/fesdgasdgasdg/9613054


免責聲明!

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



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