1. 程式人生 > >Android hdpi,xhdpi,xxhdpi一些你沒注意到的事

Android hdpi,xhdpi,xxhdpi一些你沒注意到的事

一、drawable-dpi資料夾圖片尺寸比例

我們都知道安卓系統會根據不同的手機的解析度去取不同資料夾裡的圖片,但是具體這些資料夾裡放什麼尺寸比例的圖片,怕是不少人都沒有關注過吧。可能有人會說,這是UI部門該瞭解的事,那如果UI部門的同學也不知道呢,那該怎麼辦。這種情況我就遇到過一次 = =!

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75
以mdpi為基準,相同切圖,hdpi資料夾裡的圖應該是mdpi的1.5倍,xhdpi資料夾裡的圖應該是mdpi的2倍,以此類推,只有根據這個比例來放切圖,在不同解析度手機上展示才會相對協調。PS: xxhdpi: 3.0,xxxhdpi: 4.0

Question: 那是不是一種切圖,所有的dpi資料夾都要放一份呢?

Developer Training: Note: Low-density (ldpi) resources aren’t always necessary. When you provide hdpi assets, the system scales them down by one half to properly fit ldpi screens.

也就是說,低解析度的切圖並不是必須的。在ldpi的裝置上,需要一張切圖,如果你的工程ldpi資料夾沒有提供相對應的圖,不要方,只要hdpi資料夾有對應的圖,安卓就會幫你自動把hdpi長寬縮減一半,供ldpi的裝置使用,從而保證適配。當然你只給xhdpi也是一樣會按相應比例縮放。但是如果你只放ldpi或hdpi的切圖,靠安卓系統自動幫你放大就有可能出現圖片模糊的問題,低清圖片放大出現馬賽克的道理大家都懂。至於是隻放一個較高dpi資料夾的切圖還是全放,就是時間換空間或空間換時間的問題了,仁者見仁智者見智吧。

二、如何知道手機是hdpi,xhdpi,還是xxhdpi

density = getResources().getDisplayMetrics().density;// return 0.75 if it's LDPI// return 1.0 if it's MDPI// return 1.5 if it's HDPI// return 2.0 if it's XHDPI// return 3.0 if it's XXHDPI// return 4.0 if it's XXXHDPI
switch(getResources().getDisplayMetrics().densityDpi){caseDisplayMetrics
.DENSITY_LOW:// ...break;caseDisplayMetrics.DENSITY_MEDIUM:// ...break;caseDisplayMetrics.DENSITY_HIGH:// ...break;caseDisplayMetrics.DENSITY_XHIGH:// ...break;}
----from StackOverFlow

當然還有更好的辦法啦!不用寫程式碼,不用run!快使用adb!

Windows環境下在Android Studio的Terminal裡輸入adb shell dumpsys | findStr mBaseDisplay 

(Mac 把"findStr"替換成"grep"即可)