標籤:hdp 需要 android str 情況 設定字型大小 googl dpi 介面
重要概念
什麼是螢幕尺寸、螢幕解析度、螢幕像素密度?
什麼是dp、dip、dpi、sp、px?他們之間的關係是什嗎?
什麼是mdpi、hdpi、xdpi、xxdpi?如何計算和區分?
在下面的內容中我們將介紹這些概念。
螢幕尺寸
螢幕尺寸指螢幕的對角線的長度,單位是英寸,1英寸=2.54厘米
比如常見的螢幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等
螢幕解析度
螢幕解析度是指在橫縱向上的像素點數,單位是px,1px=1個像素點。一般以縱向像素*橫向像素,如1960*1080。
螢幕像素密度
螢幕像素密度是指每英寸上的像素點數,單位是dpi,即“dot per inch”的縮寫。螢幕像素密度與螢幕尺寸和螢幕解析度有關,在單一變化條件下,螢幕尺寸越小、解析度越高,像素密度越大,反之越小。
dp、dip、dpi、sp、px
px我們應該是比較熟悉的,前面的解析度就是用的像素為單位,大多數情況下,比如UI設計、Android原生API都會以px作為統一的計量單位,像是擷取螢幕寬高等。
dip和dp是一個意思,都是Density Independent Pixels的縮寫,即密度無關像素,上面我們說過,dpi是螢幕像素密度,假如一英寸裡面有160個像素,這個螢幕的像素密度就是160dpi,那麼在這種情況下,dp和px如何換算呢?在Android中,規定以160dpi為基準,1dip=1px,如果密度是320dpi,則1dip=2px,以此類推。
假如同樣都是畫一條320px的線,在480*800解析度手機上顯示為2/3螢幕寬度,在320*480的手機上則佔滿了全屏,如果使用dp為單位,在這兩種解析度下,160dp都顯示為螢幕一半的長度。這也是為什麼在Android開發中,寫布局的時候要盡量使用dp而不是px的原因。
而sp,即scale-independent pixels,與dp類似,但是可以根據文字大小喜好設定進行放縮,是設定字型大小的禦用單位。
mdpi、hdpi、xdpi、xxdpi
其實之前還有個ldpi,但是隨著行動裝置配置的不斷升級,這個像素密度的裝置已經很罕見了,所在現在適配時不需考慮。
mdpi、hdpi、xdpi、xxdpi用來修飾Android中的drawable檔案夾及values檔案夾,用來區分不同像素密度下的圖片和dimen值。
那麼如何區分呢?Google官方指定按照下列標準進行區分:
| 名稱 |
像素密度範圍 |
| mdpi |
120dpi~160dpi |
| hdpi |
160dpi~240dpi |
| xhdpi |
240dpi~320dpi |
| xxhdpi |
320dpi~480dpi |
| xxxhdpi |
480dpi~640dpi |
在進行開發的時候,我們需要把合適大小的圖片放在合適的檔案夾裡面。下面以表徵圖設計為例進行介紹。
在設計表徵圖時,對於五種主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)應按照 2:3:4:6:8 的比例進行縮放。例如,一個啟動表徵圖的尺寸為48x48 dp,這表示在 MDPI 的螢幕上其實際尺寸應為 48x48 px,在 HDPI 的螢幕上其實際大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的螢幕上其實際大小是 MDPI 的 2 倍 (96x96 px),依此類推。雖然 Android 也支援低像素密度 (LDPI) 的螢幕,但無需為此費神,系統會自動將 HDPI 尺寸的表徵圖縮小到 1/2 進行匹配。
為表徵圖的各個螢幕密度的對應尺寸
| 螢幕密度 |
表徵圖尺寸 |
| mdpi |
48x48px |
| hdpi |
72x72px |
| xhdpi |
96x96px |
| xxhdpi |
144x144px |
| xxxhdpi |
192x192px |
解決方案支援各種螢幕尺寸使用wrap_content、match_parent、weight
要確保布局的靈活性並適應各種尺寸的螢幕,應使用 “wrap_content” 和 “match_parent” 控制某些視圖組件的寬度和高度。
使用 “wrap_content”,系統就會將視圖的寬度或高度設定成所需的最小尺寸以適應視圖中的內容,而 “match_parent”(在低於 API 層級 8 的層級中稱為 “fill_parent”)則會展開組件以匹配其父視圖的尺寸。
如果使用 “wrap_content” 和 “match_parent” 尺寸值而不是硬式編碼尺寸,視圖就會相應地僅使用自身所需的空間或展開以填滿可用空間。此方法可讓布局正確適應各種螢幕尺寸和螢幕方向。
weight是線性布局的一個獨特的屬性,我們可以使用這個屬性來按照比例對介面進行分配,完成一些特殊的需求。
使用相對布局,禁用絕對布局
在開發中,我們大部分時候使用的都是線性布局、相對布局和幀布局,絕對布局由於適配性極差,所以極少使用。
由於各種布局的特點不一樣,所以不能說哪個布局好用,到底應該使用什麼布局只能根據實際需求來確定。我們可以使用 LinearLayout 的嵌套執行個體並結合 “wrap_content” 和 “match_parent”,以便構建相當複雜的布局。不過,我們無法通過 LinearLayout 精確控制子視圖的特殊關係;系統會將 LinearLayout 中的視圖直接並排列出。
如果我們需要將子視圖排列出各種效果而不是一條直線,通常更合適的解決方案是使用 RelativeLayout,這樣就可以根據各組件之間的特殊關係指定布局了。例如,我們可以將某個子視圖對齊到螢幕左側,同時將另一個視圖對齊到螢幕右側。
關於ConstraitLayout:
http://www.jianshu.com/p/792d2682c538
http://www.jianshu.com/p/32a0a6e0a98a
本文摘自:
http://www.cocoachina.com/android/20151030/13971.html
android開發解析度適配總結