2018-01-24 android屏幕適配轉(zhuǎn)載留存

轉(zhuǎn)自?http://blog.csdn.net/fesdgasdgasdg/article/details/52325590


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

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

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

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

一、PX適配。

現(xiàn)在常用的屏幕尺寸為1280x720,一般美工也會根據(jù)這個尺寸給圖。

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

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

這個轉(zhuǎn)換很痛。

那么,省著點吧,對于1280x720的屏幕,我們?nèi)艚o寬度為720px是不是就占滿屏幕了呢?對于1920x1080的屏幕,我們寬度給1080是不是就占滿了你?

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

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

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

萬一是1920x1080呢?看圖:

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

往下看

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

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

screenMatchPX.bat內(nèi)容:

[html]?view plain?copy

java?-jar?%~dp0\screenMatchPX.jar?720?1280??

pause??

也可以寫成

[html]?view plain?copy

java?-jar?路徑\screenMatchPX.jar?720?1280??

pause??

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

[html]?view plain?copy

public?static?void?main(String[]?args)?{??

????????System.out.println("開始運行...");??

????????//基準寬高??

intbaseW?=?720;??

intbaseH?=?1280;??

Stringaddition?=?"";??

????????try?{??

if?(args.length?==?1)?{??

addition?=?args[0];??

}?else?if?(args.length?==?2)?{??

baseW?=?Integer.parseInt(args[0]);??

baseH?=?Integer.parseInt(args[1]);??

}?else?if?(args.length>=?3)?{??

baseW?=?Integer.parseInt(args[0]);??

baseH?=?Integer.parseInt(args[1]);??

addition?=?args[2];??

????????????}?else?{??

????????????????System.out.println("沒有發(fā)現(xiàn)輸入?yún)?shù)...");??

????????????}??

????????}?catch?(NumberFormatException?e)?{??

????????????System.err.println("right?input?params?:?java?-jar?xxx.jar?baseW?baseH?w,h;w,h;...;w,h;");??

????????????e.printStackTrace();??

????????????System.exit(-1);??

????????}??

????????new?GenerateValueFiles(baseW,?baseH,?addition).generate();??

????}??

默認基準值為,1280x720,

默認適配屏幕為

[html]?view plain?copy

"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;";??

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

注意參數(shù)格式:

[html]?view plain?copy

java?-jar?xxx.jar?基準width?基準height?待適配w,待適配h;待適配w,待適配h;待適配w,待適配h;??

[html]?view plain?copy

java?-jar?xxx.jar?基準width?基準height??

[html]?view plain?copy

java?-jar?xxx.jar?待適配w,待適配h;待適配w,待適配h;待適配w,待適配h;??

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

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

我踩的坑:我的測試機聯(lián)想A880,查閱屏幕參數(shù)為960x540,于是我加進去了。然后在程序中測試發(fā)現(xiàn),失陪效果不好。

經(jīng)過測試發(fā)現(xiàn),它用的是800x480的尺寸文件。糾結(jié)很久發(fā)現(xiàn)程序能得到的屏幕尺寸其實為888x540,然后修改后重新生成values文件,才正常。

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

總結(jié):

此方法,你需要做的是:

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

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

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

over

二、DP適配。

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

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

screenMatchDP.bat里面的代碼為:

[html]?view plain?copy

java?-jar?%~dp0\screenMatchDP.jar?360?384?400?411?533?640?720?768?820??

pause??

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

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

如果你不跟參數(shù),程序默認的參數(shù)為:

[html]?view plain?copy

args?=?new?String[]{"360",?"384",?"400",?"411",?"533",?"640",?"720",?"768",?"820"};??

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

[html]?view plain?copy

??


16dp??

16dp??


-60dp??

-30dp??

-20dp??

-10dp??

-5dp??

0.1dp??

0.5dp??

1dp??

2dp??

2.5dp??

3dp??

????...........??

370dp??

402dp??

410dp??

422dp??

472dp??

500dp??

600dp??

640dp??


6sp??

7sp??

8sp??

9sp??

10sp??

11sp??

????......??

19sp??

20sp??

21sp??

22sp??

24sp??

28sp??

38sp??

40sp??

41sp??

48sp??


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

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

萬一哪天你發(fā)現(xiàn)沒有你想要的item,比喻888dp。那你就在默認的values中的dimens.xml中添加888dp,然后重新執(zhí)行bat文件生成新的數(shù)據(jù)即可。

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

總結(jié):

此方法,你需要做的是:

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

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

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

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

OVER

源碼圖:

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

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

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

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

阿杜提供,放心盜版。

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

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

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

GitHub上提供更新jar和源碼

GitHub源碼地址:https://github.com/mengzhinan/PhoneScreenMatch

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

詳細使用說明文檔地址:http://download.csdn.net/detail/fesdgasdgasdg/9913744

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容