當前位置:
首頁 > 最新 > 當你在設置里修改顯示大小的時候,到底在修改什麼?

當你在設置里修改顯示大小的時候,到底在修改什麼?

新媒體管家

版權聲明:本公眾號發布的所有文章,未特殊署名,均屬於原創,版權歸本公眾號所有。

一、前言

昨天發了一篇文章,講解修改設置中『字體大小』,到底影響的是什麼。有興趣的可以先去看看:《當你在設置里修改字體大小的時候,到底在修改什麼?》而在設置中,除了設置『字體大小』之外,還有一個『顯示大小』的設置,本片文章就來聊聊,當你修改『顯示大小』之後,你到底在修改什麼?

二、使用 dp 的全屏布局

2.1 使用 dp 做一個全屏應該寫多少在 UI 適配的時候,我們一般推薦使用 dp 設置距離和大小,而使用 sp 來設定字體大小。在使用 dp 為單位來做屏幕適配的時候,影響效果的主要有屏幕像素和 density,當你知道這兩個參數之後,你就能很清晰的知道,假如你想寫一個全屏的 UI 的時候,除了使用 match_parent 之外,你還可以直接指定一個絕對的 dp 值,進行全屏化。首先說點題外的概念,當你通過 DisplayMetrics 獲取到設備的 density 的時候,你會發現它實際上有兩個值:density 和 densityDpi。例如正常我們所說的 3 倍的手機,density 為 3.0 ,densityDpi 為 480。它們之間的關係,就是以 160 為基準倍數,進行計算,公式如下:density * 160 = densityDpi不過這裡對它們的理解,最好不要硬記名稱,在很多場景下,說到 density 就是我們這裡說的 densityDpi。我們只需要看它們的值就知道它們的關係,畢竟不會有一個 480倍(density)的手機。拿到一個標準的屏幕尺寸,例如一個標準的 3 倍的手機,它的參數如下:screen px:1080x1920density:3.0densityDpi :480通過這些參數,我們就可以算出,該設備全屏支持的 dp 值就是 360dp*640dp。2.2 dp 全屏的效果了解到一個 3 倍的設備,設置全屏需要寫 360dp * 640dp ,接下來我們就開始寫個 Demo 來看看效果。

這裡只是做一個橫向的鋪滿屏幕的設定,屏幕寬度鋪滿需要 360dp。我們這裡使用一個 TextView 來設定十個字元,每個字元的尺寸為 36dp。同時下面做一個 View 鋪滿屏幕 360dp。讓我們看看在設備上運行的效果:

而當我們在設置頁面中,修改了『顯示尺寸』之後,顯示的效果就不一樣了。前面設置頁面中,『顯示尺寸』的設定,可以設置三個值:小、默認、大。先看看調小之後的效果:

可以看到,將『顯示尺寸』調小之後,360dp 已經無法鋪滿橫向的一屏了。再來看看,當它調整到大的時候,顯示的效果吧。

可以看到,調大之後,一行字,雖然同為 36dp 的文字已經寫不下一行了,基本上已經超出了屏幕之外。2.3 屏幕尺寸到底改變了什麼既然已經知道了現象,那麼我們看看,當我們調整了『屏幕尺寸』之後,我們到底改變了什麼。前面提到,獲取到屏幕相關的一些參數,可以使用 DisplayMetrics 這個對象來獲取。示例代碼如下:

在『屏幕尺寸』為默認的時候,我們是已經知道它的輸出了,接下來運行看看在屏幕尺寸為大的時候,輸出的值。

通過輸出的 Log,看到其實屏幕的像素尺寸並沒有改變,而它的 density 卻發生了改變。這也導致,橫向的 dp 尺寸,由原本的 360 變成了 320(1080/3.375),所以才會導致原本適配的很好的 UI ,已經在一屏之中顯示不下的原因。相反,當『屏幕尺寸』設置為 小 的時候,實際上縮小了 density ,從而加大了鋪滿一屏的 dp 尺寸,導致文字沒有剛好顯示一屏。2.4 快速驗證這個結論使用 DisplayMetrics 的方式,還需要寫代碼來驗證。有一個更簡單的方式來驗證它,就是使用 wm 命令來驗證,它可以支持獲取到當前屏幕的 density。adb shell wm density從輸出的結果也可以看到,它是有一個 Physical density 和 Override density 的,從字面意思,不難看出它們的含義。wm 命令就是前面提到的一個很典型的 density 和 densityDpi 概念互通的例子,這裡說的 density 就是 DisplayMetrics 中的 densityDpi,大家了解一下就可以了。來看看,當『屏幕尺寸』設置為大的時候,命令輸出的結果吧。

三、小結

到這裡,就可以得出結論,當你修改設置頁面的『屏幕尺寸』的時候,實際上你在修改你設備的 density 值,它也決定了你的 UI 是如何顯示在屏幕上的。iOS 專屬打賞

點贊或者分享吧~

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 承香墨影 的精彩文章:

突破第三方庫的 minSdkVersion 限制
從布局和實現的角度,聊聊 Notification
工作中,AS和Git更配哦!

TAG:承香墨影 |