手機屏幕適配原理及實現

為什么80%的碼農都做不了架構師?>>> ??hot3.png

手機屏幕是用戶與 App 最直接的交互點?
不同的分辨率下用戶對我們的 App 具有明顯的感觀差異,主流分辨率的更新迭代卻又完全獨立于 App 進行。這讓我們想要使 App 在絕大多數主流手機上都保持感觀、體驗的一致性提出了很大的挑戰。

屏幕尺寸?
嚴格來說,屏幕尺寸實際被物理尺寸和顯示分辨率兩個部分定義。?
而我們今天對各類手機、Pad 設備所說的屏幕尺寸,只指物理尺寸。?
如果一塊手機屏幕的物理尺寸是 5.5 英寸,即是指該手機屏幕對角線的長度。

屏幕分辨率?
屏幕分辨率是指屏幕圖像的精密度,是顯示器所能顯示的像素的具體數值。?
如一個手機標稱分辨率是 720 x 1280,即表示屏幕橫向由 720 個像素點組成,縱向由 1280 個像素點組成。?
由于屏幕上的點、線和面都是由像素組成的,屏幕具備的像素點越多,畫面就越精細。?
分辨率越高,單位面積內顯示的信息就越多,我們能看到的內容就越多。

屏幕比例?
屏幕比例是指屏幕的寬度與高度的比例,今天更多指分辨率的比例,即?
屏幕比例 = 屏幕橫向分辨率 / 屏幕縱向分辨率?
此外,在各類設備、平臺之間也有一些比較常用的比例,同時也推薦大家在開發對應設置或平臺的應用時使用推薦比例。?
使用推薦比例可以讓用戶在使用我們的 App 時更舒適,帶來更好的使用體驗。?
在這里為開發者提供一張簡單的表格,記錄了使用 APICloud 技術開發應用時四大平臺產品的主流顯示比例。?
可以看出主流應用更推薦使用 16 : 9 的屏幕比例?
圖片描述
圖片描述

DPI?
DPI(Dots Per Inch),每英寸所擁有的點數,原用于打印機、鼠標的精確度指標。?
在屏幕方面一般使用 PPI 來表示精度。

PPI?
PPI(Pixels Per Inch),每英寸所擁有的像素數,屏幕的 PPI 越高,表示屏幕中的每個像素點之間的距離越接近,像素的密度越高,這樣屏幕內容看起來就更加細膩、真實。?
而當 PPI 超過 300 時,屏幕被認為達到了視網膜級別,一般情況下人眼已經較難察覺 300 以上 PPI 之間的差別。

計算公式:?
圖片描述

以 iphone 6 plus 為例,屏幕分辨率 1080 x 1920,屏幕尺寸 5.5 英寸?
PPI = √(1920 ^ 2 + 1080 ^ 2) / 5.5 = 400.5285…… ≈ 400

屏幕密度(Density)?
Density 由 Android 1.6 版本(Android API Level 4)為了適配不同大小的屏幕而提出,表示每英寸有多少個顯示點(邏輯值),它的單位是 DPI。?
在 Android 原生開發中,常常使用 dp/dip/sp 等單位來定義視圖、文字的寬高?
理論上當 Density 的值為 160 DPI 時,1px = 1dp,當前屏幕的 Density 為 320 DPI 時,2px = 1dp?
在這里為開發者提供一張簡單的表格,記錄了幾種主流 Android 手機的 Density 值。?
圖片描述

縮放倍率(scaleFactor)?
scaleFactor 由 Apple 公司為 iPhone 屏幕適配定義的標準。?
早期的 iPhone 3GS 的屏幕分辨率是 320 x 480(PPI = 163),iOS 繪制圖形(CGPoint/CGSize/CGRect)均以點(point)為單位(measured in points):?
1 point = 1 pixel?
后來在 iPhone 4 中,同樣大小(3.5 inch)的屏幕采用了 Retina 顯示技術,橫、縱向方向像素密度都被放大到2倍,像素分辨率提高到 (320 x 2) x (480 x 2) = 640 x 960(PPI = 326), 顯像分辨率提升至 iPhone 3GS 的 4 倍(1 個 Point 被渲染成 1 個 2 x 2 的像素矩陣)。?
但是對于開發者來說,iOS 繪制圖形的 API 依然沿襲 point(pt,注意區分印刷行業的“磅”)為單位。在同樣的邏輯坐標系下(320 x 480):?
1 point = scale x pixel?
在 iPhone 4 ~ 6 中,縮放因子 scale = 2;在 iPhone 6 plus 中,縮放因子 scale = 3,可以理解為:?
scale = 絕對長度比(point / pixel)= 單位長度內的數量比(pixel / point)?
? 其中 iPhone 6 Plus 的 scale = 3 只是為了書寫方便,實際會在渲染時被 iOS 系統轉換,除以 1.15,變為 2.608 倍左右?
在這里為開發者提供一張簡單的表格,記錄了幾種主流 iPhone 手機的 scaleFactor 值。?
圖片描述

邏輯分辨率?
邏輯分辨率在 APICloud 應用中也可以被當做顯示分辨率使用。?
邏輯分辨率與屏幕分辨率在當今的主流設備中是不相同的,公式為:?
邏輯分辨率 = 屏幕分辨率 / 屏幕倍率?
在 Android 系統中,根據 DP 的定義 1dp = 1px 時, Density 為 160,可知公式為:?
Android 屏幕倍率 = Density / 160?
如 iPhone 4 的屏幕分辨率為 640 x 960,邏輯分辨率為:?
640 / 2 x 960 / 2 = 320 x 480?
而小米 2 的屏幕分辨率為 720 x 1280,Density 為 320,邏輯分辨率為:?
720 / (320 / 160) x 1280 / (320 / 160) = 360 x 640

推薦 UI 尺寸?
APICloud 應用中的頁面均使用邏輯分辨率來顯示元素,考慮到屏幕比例、實際換算難度等因素,我們推薦您選擇 720 x 1280 分辨率為標準制作 UI 設計圖。?
量圖標準?
? 絕對計量?
o 優先考慮絕對計量類的單位,如 px 單位?
? 相對計量?
o 如果使用 px 等絕對計量值無法實現所需布局時,可以考慮使用 rem,百分比等單位?
o 選擇百分比做為元素寬度、高度單位時,推薦只使用 100%,而不使用非 100% 的值,此類數值較容易出現頁面變形?
? 使用 640 x 960 或 720 x 1280 的 UI 設計圖,應先量出元素的寬或高對應的 px 值,再除以 2 得到書寫樣式時的確切數值?
o 如:一個按鈕在 720 x 1280 的設計圖中占具了 160 px 寬,88 px 高,我們的樣式應該指定該按鈕 width:80px;height:44px?
? 彈性盒子?
o 當絕對計量和相對計量均無法輕易實現所需布局時,可以考慮使用彈性盒子(flex、box)?
o 由于 iOS 和 Android 系統瀏覽器都使用 -webkit- 標準,彈性盒子樣式只需要適配 -webkit- 即可?
? box-sizing?
o 我們還可以利用樣式屬性 position 來實現特殊布局,將元素指定為 position:relation 或 position:absolute,同時結合樣式屬性 box-sizing 改變盒子計算方式并指定具體的padding 值完成布局

viewport?
viewport 是由 Apple 公司為了讓更多桌面網站可以在 safari 瀏覽器內正常顯示而推出的解決方案,后被各大瀏覽器支持。?
使用 viewport 可以自定義當前頁面在瀏覽器中以何種分辨率顯示。?
而 APICloud 應用由于在引擎層做了多屏幕適配工作,如手動指定 viewport 為某個具體的數值時,可能會造成我們的應用頁面顯示變形。?
在 APICloud 應用中,我們推薦您使用下述代碼設置 viewport 以保證您的應用顯示正常:?
圖片描述

轉載于:https://my.oschina.net/u/859939/blog/729703

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458160.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458160.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458160.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數字圖像處理】傅里葉變換在圖像處理中的應用

from:https://www.cnblogs.com/tenderwx/p/5245859.html 1.理解二維傅里葉變換的定義 1.1二維傅里葉變換 二維Fourier變換: 逆變換: 1.2二維離散傅里葉變換 一個圖像尺寸為MN的 函數的離散傅里葉變換由以下等式給出: 其中 和。其中變量u和…

最好的云備份選項

能夠實現數據備份的方式有很多。在虛擬化技術最為興盛的時期,首選方式是使用數據保護軟件,在hypervisor層進行備份或者復制整臺虛擬機,比如Veeam Backup以及Zerto提供的同步軟件。 對于使用VMware云的IT部門來說,這種方式現在仍然…

求二叉樹中兩個節點的最遠距離

問題定義如果我們把二叉樹看成一個圖,父子節點之間的連線看成是雙向的,我們姑且定義"距離"為兩節點之間邊的個數。寫一個程序求一棵二叉樹中相距最遠的兩個節點之間的距離。計算一個二叉樹的最大距離有兩個情況:情況A: 路徑經過左子樹的最深節…

halcon學習(算子匯總)

from:https://www.cnblogs.com/hanzhaoxin/archive/2013/01/09/2852213.html dev_clear_obj(Objects : : : ) 刪除一個iconic對象 dev_error_var( : : ErrorVar, Mode : ) 定義或取消定義一個錯誤變量 dev_get_exception_data( : : Exception, Name : Value) 獲取異常數據…

Bing Speech Recognition 標記

Bing Speech Services Bing Bing Speech Services provide speech capabilities for Windows and Windows Phone https://msdn.microsoft.com/en-us/library/dn303461.aspx 已失效。 轉載于:https://www.cnblogs.com/zangdalei/p/5312440.html

Source Insight 4.0 最簡單的破解安裝

from:https://blog.csdn.net/biubiuibiu/article/details/78044232 三步完成Source Insight 4.0 破解安裝 下載地址有更新,之前有朋友因潛在的版權問題封禁沒下到,現在更新后可正常使用了。 文末有完全清除上次安裝殘留的方法,…

【原】Spark中Master源碼分析(一)

Master作為集群的Manager,對于集群的健壯運行發揮著十分重要的作用。下面,我們一起了解一下Master是聽從Client(Leader)的號召,如何管理好Worker的吧。 1.家當(靜態屬性) 1.設置一個守護單線程的…

XML——XML介紹和基本語法

from:https://blog.csdn.net/gavin_john/article/details/51511180 1.XML歷史 gml(1969)->sgml(1985)->html(1993)->xml(1998) 1969 gml(通用標記語言),主要目的是要在不同的機器之間進行通信的數據規范1985 sgml(標準通用標記語言)1993 htm…

Tomcat7.0安裝配置

很久沒有通過博客對學習所得進行記錄了。 現在將使用Tomcat的一些經驗和心得寫到這里,作為記錄和備忘。如果有朋友看到,也請不吝賜教。 首先,我個人使用的是apache-tomcat-7.0.27你可以下載使用,前提條件你需要安裝JDK1.6或者1.7都…

TIFF圖像文件格式詳解

from:https://www.cnblogs.com/gywei/p/3393816.html 1 什么是TIFF? TIFF是Tagged Image File Format的縮寫。在現在的標準中,只有TIFF存在, 其他的提法已經舍棄不用了。做為一種標記語言,TIFF與其他文件格式最大的不…

java 抽象工廠模式簡單實例

抽象工廠模式:提供一個創建一系列的相關的或者依賴的對象的接口,無需指定它們的具體實現類,具體的時間分別在子類工廠中產生。 類似于工廠模式:隔離了具體類的生產實現,使得替換具體的工廠實現類很容易。包含有以下模塊…

圖像處理之積分圖應用三(基于NCC快速相似度匹配算法)

from:https://blog.csdn.net/jia20003/article/details/53021614 圖像處理之積分圖應用三(基于NCC快速相似度匹配算法) 基于Normalized cross correlation(NCC)用來比較兩幅圖像的相似程度已經是一個常見的圖像處理手段。在工業生產環節檢測…

深入淺出地理解機器人手眼標定

from:https://blog.csdn.net/qq_16481211/article/details/79764730 所謂手眼系統,就是人眼鏡看到一個東西的時候要讓手去抓取,就需要大腦知道眼鏡和手的坐標關系。如果把大腦比作B,把眼睛比作A,把手比作C,如果A和B的…

centos 6.5 安裝 mongodb

官方給出的鏈接地址:https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/ 安裝后重要的日志 win10 上使用mongochef連接不上數據庫 解決方案: 修改 /etc/mongod.conf 將bindIP 改為0.0.0.0 監聽外網轉載于:https://www.cnblogs.com/l…

scala學習資料

1. scala-sbt 構建工具: http://www.scala-sbt.org/0.13/docs/zh-cn/Directories.html 2. 資料: http://www.ibm.com/developerworks/cn/java/j-lo-funinscala2/ https://www.zhihu.com/question/34548588?sortcreated http://nerd-is.in/2013-09/scala…

opencv3/C++ 機器學習-SVM應用實例:藥品(膠囊)識別與分類

from:https://blog.csdn.net/akadiao/article/details/79278072 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/akadiao/article/details/79278072 問題描述: 現對6種不同顏色藥品(膠囊…

Elasticsearch 搜索不到數據問題(_mapping 設置)

需求 由于 kibana3 中,不支持直接在請求的 url 中設置搜索的 type (是不是我不知道???)。 為了支持特定 type 的搜索,所以我設置了個下每個 panel 的查詢語句,讓它增加一個&#xff…

SVM之交叉驗證【轉】

交叉驗證(CrossValidation)方法思想簡介 以下簡稱交叉驗證(Cross Validation)為CV.CV是用來驗證分類器的性能一種統計分析方法,基本思想是把在某種意義下將原始數據(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set),首先用訓練集對分類器進…

linux命令學習-1-less

less 工具也是對文件或其它輸出進行分頁顯示的工具,應該說是linux正統查看文件內容的工具,功能極其強大。less 的用法比起 more 更加的有彈性。在 more 的時候,我們并沒有辦法向前面翻, 只能往后面看,但若使用了 less …

python問題匯總

問題1:如何解決python3中numpy報錯No module named numpy 打開terminal pip3 install numpy 問題2:ModuleNotFoundError No module named matplotlib 打開terminal pip3 install matplotlib