版權聲明:java
本帳號發佈文章均來自公衆號,承香墨影(cxmyDev),版權歸承香墨影全部。android
每週會統一更新到這裏,若是喜歡,可關注公衆號獲取最新文章。shell
未經容許,不得轉載。佈局
在 Android 開發的工做平常中,UI 適配是一件比較重要的事情。通常開發新的功能,有新的頁面,最終開發完成發佈以前,都須要讓設計師來審 UI 效果。性能
而有時候,明明咱們已經在一款標準的 3 倍手機上,作到了讓設計師小姐姐滿意的效果,可是當換了另一臺手機的時候,效果又不那麼如意。ui
傳統的作法是,拿到效果不對的手機,單獨適配看看是否是哪裏佈局寫的不對致使效果不正確,而後改正它。可是總能碰到咱們拿不到真實設備的狀況。設計
本文就介紹一個命令,能夠修改你當前設備的參數,來模擬出目標設備的顯示效果,讓你獨立就把多機型 UI 效果確認的事情給作了。3d
說的這麼厲害,實際上須要使用的就是一行 wm 命令,能夠經過 adb shell
來操做它。code
wm 命令主要用來幫助咱們修改一些屏幕的參數,先來看看它的文檔。使用 adb shell wm
命令,能夠方便的查看 wm 的文檔描述cdn
能夠看到,wm 命令能夠幫助咱們修改當前設備的 size 、 density 等參數,而這兩個參數就是決定了當前設備的顯示效果。
從上面的文檔能夠看出,它其實支持的命令仍是挺多的,可是有一些根本用不上,是須要系統權限的,因此正常來講咱們是沒法使用的。那麼,仍是介紹幾個比較實用的命令。
如下例子都是在一款標準 density 爲 3 的設備上運行的,屏幕像素爲 1080px * 1920px。
wm size
命令,能夠用來查詢和修改當前設備的尺寸,若是想要修改尺寸,可使用 px 或者 dp 爲單位(默認爲 px),使用 x 進行鏈接,這個其實看看 wm size
的輸出,你就清楚了。
在這裏的例子中,作了幾件事情:
wm size
命令查看當前設備的尺寸。wm size
命令將當前尺寸修改爲了 1000x2000。wm size
命令查看當前設備的尺寸。wm size reset
命令,將屏幕尺寸還原。wm size
命令,查看還原後的尺寸。這幾個步驟就已經涵蓋了 wm size 命令的全部使用步驟,可使用它查看當前屏幕尺寸,而且修改屏幕尺寸和還原它。
wm density
命令,能夠用來查看和修改當前設備的 density 參數。
使用起來很簡單,直接上命令了。
在這個例子中,我作了幾件事情:
wm density
查看當前設備的 density。wm density
命令,修改當前設備的 density 爲 420。wm density
查看修改後的參數。wm density reset
將設備的 density 還原。wm overscan
命令,能夠修改當前設備的屏幕內邊距。其實我以爲這個命令沒什麼用處,可是仍是演示一下如何使用。
在這個例子中,作了幾件事情:
wm overscan
修改邊距爲 20 。wm overscan reset
將其還原。wm 命令的邏輯很是的簡單,它其實是和 WindowManagerService 進行交互,經過 WMS 來修改屏幕相關的一些參數。
這裏就不介紹完整的 wm 源碼了,就以一個方法舉例來看看 wm 的邏輯。這裏就以 wm size
命令舉例好了。
首先,看看 wm 命令的入口。
這裏會初始化 mWm ,而且根據輸入的參數,調用不一樣的方法,若是輸入的是 size ,則會調用 runDisplaySize()
方法。
在 runDisplaySize()
方法中,會先判斷 size 命令後面有沒有跟其它參數,若是沒有,則認爲是一次查詢操做,會將查詢到的結果輸出。
而若是是 reset 方法的話,就將 w 、h 這兩個表明寬高的值,設置爲 -1,最終會經過 mWm.clearForcedDisplaySize()
方法,將屏幕的 size 還原。
否者就從輸入的參數中,經過 x 進行分割,拿到咱們輸入的寬高。最終經過 mWm.setForcedDisplaySize()
方法,將當前屏幕的 size 修改爲咱們輸入的結果。
在設置size 的時候,還會經過 parseDimens()
方法,從新計算一下輸入的尺寸。
從這裏能夠看出,它支持兩個尺寸,px 和 dp ,若是若是不指定尺寸,則默認認爲是 px 。
到這裏就完成了一次經過 wm size
命令,修改設備屏幕參數的全過程,跟多細節能夠自行查閱源碼。
源碼的在線地址:
既然已經講清楚 wm 命令的全部細節了,那麼咱們只須要拿到咱們須要適配的設備的 size 和 density。就能夠在咱們本身的設備上模擬出對應的效果。
我這裏收集了一些比較經常使用的設備參數,能夠供你們參考一下。
固然,最重要的是拿到公司各類 CEO、CTO、CxO 正在使用的手機參數,進行一波適配,哈哈。
下面,咱們隨便挑兩個設備的參數進行修改,而後看看運行後的效果。
命令以下:
// 修改爲 一加5
adb shell wm density 420
adb shell wm size 1080x1920
// 修改爲 Moto-tx1095
adb shell wm density 432
adb shell wm size 1080x1790
下面,從作到右,分別是本來的尺寸、一加五、Moto-tx1095。
其實看着差別不大,只能說桌面佈局寫的挺好的,因此說,若是佈局寫的好的話,是能夠避免在不一樣設備上看着很明顯的不一樣的問題 ,就像如今這樣。
實際上 wm 命令,也是有一些其它問題的,例若有時候經過 wm 命令修改 UI 的的時候,刷新會不及時,會卡頓,因此選擇一個性能比較好的手機是一個緩解的辦法。或者修改參數以後,退出 App 從新進也是一個不錯的辦法。
若是調整到一個太特殊的參數,例如 200x1000 這種,可能渲染起來會很奇怪。可是若是隻是作一些常規設備參數的修改,只要修改值在合理的範圍內,通常都是能夠的。
點贊或者分享吧~