前言:關於這個問題就設計到了不少單位了,什麼px、pt、dp、sp,手機尺寸,ppi等等,我這裏只介紹我解除過比較靠譜的。若是你有更好的屏幕適配方案,請在評論區留下連接。很是感謝java
什麼是最小寬度限定符,先看看個人截圖把:android
沒錯,以values-sw360dp 這種結尾的文件夾,和你項目裏的values文件處於同一級。git
我簡單用個人話理解下:google推薦使用的單位是dp(就像蘋果推薦使用的單位是pt同樣),這裏的意思是屏幕密度的意思。聽到密度就知道了。雖然各大android尺寸分辨率不少,可是用密度衡量的話,會顯得不多。簡單的話來講就是:1寸的屏幕裏,像素點是同樣的github
詳細連接,感謝。
app
當你會使用ScreenMatch插件後,我稍微講下screenMatch.properties這個文件,是插件自動生成的:工具
點開的是這樣的佈局
############################################################################
#
# You need to refresh or reopen the project every time you modify the configuration,
# or you can't get the latest configuration parameters.
#
#############################################################################
#
# Base dp value for screen match. Cut the screen into [base_dp] parts.
# Data type is double. System default value is 360.
# I advise you not to modify the value, be careful !!!!!!!!! _^_ *_*
# 設計圖上最小的寬度的基準值。意思就是滿屏時是360dp
base_dp=360
# Also need to match the phone screen of [match_dp].
# If you have another dp values.
# System default values is 320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365
# 要適配的最小寬度有哪些寬度
match_dp=320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640
# If you not wanna to match dp values above. Write some above values here, append value with "," .
# For example: 811,961,1365
# 須要忽略適配的寬度有哪些
ignore_dp=662,720,768,800,811,820,960,961,1024,1280,1365
# They're not android module name. If has more,split with , Symbol.
# If you set, it will not show in SelectDialog.
# If you have, write here and append value with "," .
# For example: testLibrary,commonModule
複製代碼
首先咱們要知道一點,同時要適配手機和平板,這裏應該有2套佈局。作一套手機的作一套平板的。知道這個就好辦了。咱們都知道手機屏幕的大小通常在3英寸-5英寸之間,平板電腦的大小在7英寸-10英寸之間。因此手機會直接運行layout裏的佈局。咱們再定義一個layout-sw600dp文件夾,與layout同一層。裏面的佈局就是平板佈局。固然你要更精細的能夠協商不一樣尺寸的文件夾。以下 測試
當你會使用screenMatch插件裏,是否是生成了不少最小寬度限定符swXXdp的文件夾。以前也說了最小寬度限定符,是不區分橫豎屏,既最小那邊是最小寬度。那麼這樣的話在切換橫豎屏幕的時候是會混亂的。意思你再豎屏的時候設置了一個控件,佔屏幕寬度一半,但切換到橫屏時,卻沒有佔一半。具體怎麼作呢??
將插件生成的文件夾,前面的swXXdp的s去掉,變成wXXdp。,大體意思,當前方向就是最小寬度的方向,這裏區分了橫豎屏了。看下面效果(這裏配置好了,我什麼都沒幹,只是旋轉了手機,看適配效果):google
這裏稍微提下,就不細講了。若是你想單獨爲橫屏或者豎屏幕適配一套,能夠利用橫豎限定符spa
什麼是屏幕分辨率限定符?
可是通過我具體細緻的測試下,我發現問題大大的。首先這自己就是屏幕分辨率限定符的弊端。先看個人測試,我使用的真機測試機,
很明顯個人手機是1080 x 1920的分辨率。這裏咱們從lay_x.xml分析就好了。首先我是以設計圖裏的寬度375去生成這些文件夾。 以後我在Activity裏放了2個控件,一個設置成@dimen/x375,另一個設置成@dimen/x187。可是結果並非,一個滿屏,一個半屏。以後我很奇怪因此我在Activity裏打印了當前@dimen/x375的長度,和屏幕當前寬度。結果是這樣的:
發現屏幕寬度確實是1080。可是@dimen/x375的值確是800。而後我那一堆values文件夾裏去找,找到了values-1280x800文件夾裏是800px。可是我就有點奇怪了。既然有values-1920x1080文件夾。爲何不走呢??!!我後面怒刪values-1280x800文件夾。結果走的是values-1280x768。我整我的都震驚了,震驚了。我在想,我之前某些項目豈不是坑爹了。!!後面繼續怒刪values-1280x768文件夾。結果刪了一個遍,系統一直去往上找。就是不找1920x1080。沒辦法繼續去找資料瞭解這個機制。直接給連接吧
被誤用的屏幕分辨率限定符
Android 屏幕適配,比較全的方案
我的建議屏幕分辨率限定符仍是當心使用吧。不像screenMathch那樣能經受的住考驗。若是你有更好的屏幕適配方法,請在評論區留下連接。一塊兒加油進步。3q
今日頭條屏幕適配方案終極版,一個極低成本的 Android 屏幕適配方案
字節跳動官方文章 小結:通過實際測試和大量虛擬機測試,今日頭條是以360dp爲例,且以160dpi爲例。不改代碼直接去試。設置了360dp後,若是屬於160dpi的手機確實正常,可是不是160的dpi卻不是滿屏。且若是動態獲取dpi:appDisplayMetrics.densityDpi。卻發現仍是不能實現如官網文章所說的效果。是我忽略什麼了嗎?並且全it平臺全是以官網文章爲例子,360和160。你們真的用了多種機型測試過嗎。但願有比較瞭解的,能解決個人疑惑!!!