1. 程式人生 > >Android螢幕適配前先了解這些

Android螢幕適配前先了解這些

前言:
之前很火的螢幕適配方案不知道大家都去嘗試過寫進專案中沒,應該有一部分人在隔岸觀火,大概的原因就是目前並沒有遇到能把專案重構的適配問題,另一方面就是有的適配方案還沒有很成熟的應用,都不想拿自己的專案去測試。就拿那些github開源庫上面的適配方案來說,沒有幾個人去上面提issues。就在最近我去試了一下今日頭條的適配方案,然後。。。哎~~接著往下看吧

一 ppi和dpi這兩個單位是什麼?有什麼關係?

ppi(Pixels per inch) 指每英寸上的物理畫素數數目,即 "畫素密度“。一般再購買手機的時候都會在引數中看到該裝置的ppi數值,ppi數值越大螢幕顯像效果越好。不過ppi是物理上的概念,是客觀存在的不會改變的值,跟開發中常見的dpi是完全不同的。

dpi(Dots Per Inch)指每英寸有多少個點,最初是用在印刷行業,用來描述每英寸有多少小黑點。dpi被用於Android開發中用來描述螢幕畫素密度的單位,是手機出廠就寫在系統配置中的一個固定數值,一般是固定不變的,除非你root之後去系統檔案中修改這個值,不過手機root有太多的風險,不推薦去root,開發中可以用DisplayMetrics類去獲取dpi數值。

ppi和dpi是沒有任何關係的。有些文件中ppi 等於 dpi的言論都是瞎扯的,它們之間也沒有什麼換算關係,還有的文章說 dpi的取值取決於ppi處於哪個dpi的範圍,然後取這個範圍最大的值,這一點是沒有任何的依據,至於dpi的賦值我們也無法得知手機廠商是根據什麼去確定的。

ppi的數值我們可以通過以下公式算出,一般的話手機引數裡面都能看到ppi的數值,該公式並不適用計算dpi。

dpi不能用上面的公式求出,dpi可以通過DisplayMetrics類的densityDpi屬性獲取當前手機的dpi數值,該類也可以獲取到跟螢幕密度有關的其它屬性。一般獲取DisplayMetrics類有以下方法:

方式1:
//content:Activity,Content,Application. 
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
方式2:
//getSystemService可以通過 Activity,Content,Application等獲取.
DisplayMetrics displayMetrics = new DisplayMetrics(); WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); windowManager.getDefaultDisplay().getMetrics(displayMetrics);

二 為什麼dp滿足不了現在的螢幕適配(設計圖按1080x1920設計)?

為什麼強調設計圖呢, 因為設計圖是UI設計師根據APP的型別以及使用場景精心設計的,同時設計稿直接決定app介面預期的顯示效果,決定了每個控制元件預期的大小,而螢幕適配也是要解決在Android尺寸限制的範圍內,按照一套設計圖寫出的佈局要在大部分機型上面顯示效果都跟設計圖一樣。一般的設計師會給一套尺寸,比如1080 X 1920 即 360dp X 640dp 比例 9:16的,或者IOS和Android使用一套設計圖(一般都會讓Android用IOS的設計稿)。在沒有嚴格要求的話我們只是使用了dp來寫佈局, 反正現在一直都是