WM修改屏幕分辨率 —加快手機運行速度—一機也能做適配

WM修改屏幕分辨率 —加快手機運行速度—一機也能做適配

注:轉自微信原文

一、多機型 UI 適配

在 Android 開發的工作日常中,UI 適配是一件比較重要的事情。一般開發新的功能,有新的頁面,最終開發完成發佈之前,都需要讓設計師來審 UI 效果。

而有時候,明明我們已經在一款標準的 3 倍手機上,做到了讓設計師小姐姐滿意的效果,但是當換了另外一臺手機的時候,效果又不那麼如意。

傳統的做法是,拿到效果不對的手機,單獨適配看看是不是哪裏佈局寫的不對導致效果不正確,然後改正它。但是總能碰到我們拿不到真實設備的情況。

本文就介紹一個命令,可以修改你當前設備的參數,來模擬出目標設備的顯示效果,讓你獨立就把多機型 UI 效果確認的事情給做了。

二、WM 命令

2.1 什麼是 WM 命令

說的這麼厲害,實際上需要使用的就是一行 wm 命令,可以通過 adb shell 來操作它。

wm 命令主要用來幫助我們修改一些屏幕的參數,先來看看它的文檔。使用 adb shell wm 命令,可以方便的查看 wm 的文檔描述

img

可以看到,wm 命令可以幫助我們修改當前設備的 size 、 density 等參數,而這兩個參數就是決定了當前設備的顯示效果。

2.2 WM 的命令

從上面的文檔可以看出,它其實支持的命令還是挺多的,但是有一些根本用不上,是需要系統權限的,所以正常來說我們是無法使用的。那麼,還是介紹幾個比較實用的命令。

以下例子都是在一款標準 density 爲 3 的設備上運行的,屏幕像素爲 1080px * 1920px。

1、wm size

wm size 命令,可以用來查詢和修改當前設備的尺寸,如果想要修改尺寸,可以使用 px 或者 dp 爲單位(默認爲 px),使用 x 進行連接,這個其實看看 wm size 的輸出,你就清楚了。

img

在這裏的例子中,做了幾件事情:

  1. 使用 wm size 命令查看當前設備的尺寸。
  2. 使用 wm size 命令將當前尺寸修改成了 1000x2000。
  3. 再次使用 wm size 命令查看當前設備的尺寸。
  4. 最後使用 wm size reset 命令,將屏幕尺寸還原。
  5. 再用 wm size 命令,查看還原後的尺寸。

這幾個步驟就已經涵蓋了 wm size 命令的所有使用步驟,可以使用它查看當前屏幕尺寸,並且修改屏幕尺寸和還原它。

2、wm density

wm density 命令,可以用來查看和修改當前設備的 density 參數。

使用起來很簡單,直接上命令了。

img

在這個例子中,我做了幾件事情:

  1. 使用 wm density 查看當前設備的 density。
  2. 在使用 wm density 命令,修改當前設備的 density 爲 420。
  3. 然後再使用 wm density 查看修改後的參數。
  4. 最後使用 wm density reset 將設備的 density 還原。
  5. 最後再查看一下還原後的值。

3、wm overscan

wm overscan 命令,可以修改當前設備的屏幕內邊距。其實我覺得這個命令沒什麼用處,但是還是演示一下如何使用。

img

在這個例子中,做了幾件事情:

  1. 使用 wm overscan 修改邊距爲 20 。
  2. 然後使用 wm overscan reset 將其還原。

2.3 WM 命令的原理

wm 命令的邏輯非常的簡單,它實際上是和 WindowManagerService 進行交互,通過 WMS 來修改屏幕相關的一些參數。

這裏就不介紹完整的 wm 源碼了,就以一個方法舉例來看看 wm 的邏輯。這裏就以 wm size 命令舉例好了。

首先,看看 wm 命令的入口。

img

這裏會初始化 mWm ,並且根據輸入的參數,調用不同的方法,如果輸入的是 size ,則會調用 runDisplaySize() 方法。

img

runDisplaySize() 方法中,會先判斷 size 命令後面有沒有跟其它參數,如果沒有,則認爲是一次查詢操作,會將查詢到的結果輸出。

而如果是 reset 方法的話,就將 w 、h 這兩個代表寬高的值,設置爲 -1,最終會通過 mWm.clearForcedDisplaySize() 方法,將屏幕的 size 還原。

否者就從輸入的參數中,通過 x 進行分割,拿到我們輸入的寬高。最終通過 mWm.setForcedDisplaySize() 方法,將當前屏幕的 size 修改成我們輸入的結果。

在設置size 的時候,還會通過 parseDimens() 方法,重新計算一下輸入的尺寸。

img

從這裏可以看出,它支持兩個尺寸,px 和 dp ,如果如果不指定尺寸,則默認認爲是 px 。

到這裏就完成了一次通過 wm size 命令,修改設備屏幕參數的全過程,跟多細節可以自行查閱源碼。

源碼的在線地址:

http://androidxref.com/7.1.1_r6/xref/frameworks/base/cmds/wm/src/com/android/commands/wm/Wm.java

三、實施修改設備參數

既然已經講清楚 wm 命令的所有細節了,那麼我們只需要拿到我們需要適配的設備的 size 和 density。就可以在我們自己的設備上模擬出對應的效果。

我這裏收集了一些比較常用的設備參數,可以供大家參考一下。

  • 魅族MX3:440,1080x1800
  • 一加5:420,1080x1920
  • 紅米NOTE,320,720x1280
  • 華爲MATE7,480,1080x1812
  • MOTO-G5,480,1080x1920
  • Moto-tx1095,432,1080x1790
  • Nexus5x,420,1080x1794
  • Nexus6p,560,1440x2392
  • 奇酷360,460,1080x1920
  • VivoX5,320,720x1280

當然,最重要的是拿到公司各種 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

下面,從做到右,分別是原本的尺寸、一加5、Moto-tx1095。

mark

其實看着差異不大,只能說桌面佈局寫的挺好的,所以說,如果佈局寫的好的話,是可以避免在不同設備上看着很明顯的不同的問題 ,就像現在這樣。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章