標籤:android blog http 使用 ar strong 檔案 sp div
幾個概念:1) 螢幕密度(dpi) :dot per inch,即每英吋像素數。ldpi(120),mdpi(160),hdpi(240),xhdpi(320)計算方法:以480x854,4.0inch手機為例,其對角線為4.0inch,對角線的像素數為:(480^2 + 854^2)開根號 = 979.所以其dpi = 979 / 4 = 245,約為2402)螢幕尺寸:對角線長度。有small,normal,large,extra large 3)方向:橫屏和豎屏 4)解析度:一個物理螢幕上總的像素點數,如480x800等。我們應用中並不使用解析度這個概念,主要是dpi和尺寸 5)dp(density-independent pixel)獨立像素單位。一個抽象概念,用來定位UI布局,包括尺寸和位置。 1、可以在android工程目錄res下有四個檔案夾,主要是為了支援多解析度的圖片drawable-hdpidrawable-mdpidrawable-ldpidrawable-xhdpi 當設計給出切圖時,我們首先需要明確一點,設計給出的切圖是在什麼尺寸下給出的。如果是480x800的切圖,則應該放入drawable-hdpi目錄下,如果是320x480的切圖,則應該放在mdpi目錄下。如果是720x1280的切圖,則應該放在xhdpi目錄下。 當使用該圖片時,系統會根據機器的解析度到相應的檔案夾下尋找圖片。
問題1:如果只放一套圖片,系統如何對圖片的解析度進行轉換?android系統載入圖片資源遵循下面的規則:首先判斷手機的螢幕密度,然後在相應的密度下檔案夾中尋找圖片資源。如果找到,則進行顯示。如果找不到,則會從drawable或者其他drawable-*檔案夾中尋找。找到後,將檔案夾所表示的密度與手機實際密度進行比較,從而縮放圖片。例如在drawable下找到資源(等價於從drawable-mdpi),而手機又是hdpi的,這樣android在顯示圖片時會將圖片進行放大,以滿足hdpi手機顯示需要。不難想象,圖片肯定會變模糊。 系統載入圖片前先將圖片進行縮放,因此你通過getwidth得到的尺寸已經是經過縮放的尺寸了。縮放比例與密度之比保持一致。
問題2:如果切圖放錯檔案夾會有什麼問題?如果放錯檔案夾,系統會進行相應的縮放,使圖片進行錯誤的縮放。例如hdpi的圖片放到mdpi中,在hdpi的手機顯示,會比原圖片大
問題3:720p圖片相關問題?
設計給切圖,最好根據那個dpi呢?是都可以嗎?一般應該給480*800的hdpi的切圖。這樣對於mdpi,可以自動縮小。映像顯示品質不受影響。對於xdpi,放大幅度不大,映像顯示品質影響較小。 那麼為什麼不用xhdpi呢,這樣都是縮小映像不是更好嗎?有兩個理由,一是增大了apk的尺寸,另一個就是容易引起切圖的變形,影響顯示。主要是對於.9的圖片,有對某一方向進行了壓縮,如果設定時,展開地區太小,再壓縮時可能變形。當然這也不是絕對的,可以通過增大.9.png檔案的展開地區來實現。或許還有個理由,xhpi的機型比較不佔多數。
2、dp工作原理
最關鍵要記住一個公式: android在計算pixel值時會首先判斷螢幕的密度。如果我們把mdpi設為1,則hdpi就等於1.5. 如果我們使用dp為單位,android在轉換為pixel時會依據下面公式: px = dp * density;
dp表示獨立像素密度,所謂獨立,就是不依賴與螢幕的密度。
從本質上來看,dp其實表示是相同的物理長度,註:不是以像素為單位,而是以inch為單位。 例如對於mdpi,長度為m inch的螢幕,其像素數為n1,dp數為n2. 對於hdpi,也是長度為m inch,包含的像素數為n1 * 1.5. 根據公式可以算出,其dp值為n1 * 1.5 / 1.5 = n1. 對於xhdpi的也是n1.
即:相同的物理長度其dp值相同。
從表象上看,dp可以表示一個相同的比例也就是在ldpi、mdpi、hdpi和xdpi的螢幕密度中,用同一個dp值,可以表示相同的比例。 請注意:是比例而不是尺寸。因為UI設計中,我們最關心的是一個視圖相對於整個螢幕的比例,例如:在mdpi中,某TextView的長度占螢幕寬度的1/2,假設螢幕的寬度像素為320pixel,那麼TextView為160pixel。而在hdpi中,我們需要該TextView也佔到螢幕的1/2,才能稱之為適應了不同的螢幕密度。為了實現這個目標,Android提供了dp的概念。 我們把dip為160(mdpi)的螢幕與dp一一對應起來,即mdpi螢幕中,1個pixel就等於1個dp。通常,mdpi的螢幕寬度為320pixel,所以其螢幕寬度為320dp。 以上摘抄自http://blog.csdn.net/tanqiantot/article/details/11174011 以備忘 多螢幕適配的4條黃金原則
1) 在layout檔案中設定控制項尺寸時應採用fill_parent、wrap_content、match_parent和dp;
具體來說,設定view的屬性android:layout_width和android:layout_height的值時,wrap_content,match_parent或dp比px更好,文字大小應該使用sp來定義。
2) 在程式的代碼中不要出現具體的像素值,在dimens.xml中定義;
為了使代碼簡單,android內部使用pix為單位表示控制項的尺寸,但這是基於當前螢幕基礎上的。為了適應多種螢幕,android建議開發人員不要使用具體的像素來表示控制項尺寸。
3) 不使用AbsoluteLayout(android1.5已廢棄) ,可以使用RelativeLayout替代;
4) 對不同的螢幕提供合適大小的圖片。
不同大小螢幕用不同大小的圖片,low:medium:high:extra-high圖片大小的比例為3:4:6:8;舉例來說,對於中等密度(medium)的螢幕你的圖片像素大小為48×48,那麼低密度(low)螢幕的圖片大小應為36×36,高(high)的為72×72,extra-high為96×96。
使用9-patch PNG圖片
使用圖片資源時,如果出現展開,因為圖片處理的原因,會變形,導致介面走形。9-patch PNG圖片也是一種標準的PGN圖片,在原生PNG圖片四周空出一個像素間隔,用來標識PNG圖片中哪些部分可以展開、哪些不可以展開、背景上的邊框位置等。
“上、左”定義可展開地區
“右、下”定義顯示地區,如果用到完整填充的背景圖,建議不要通過android:padding來設定邊距,而是通過9-patch方式來定義。
Android SDK中提供了編輯9-Patch圖片的工具,在tools目錄下draw9patch.bat,能夠立刻看到編輯後的展開效果,也可以直接用其他圖片編輯工具編輯,但是看不到效果。
Android螢幕適配原理