【Android】Android 支持多屏幕機制

1.Screen size 屏幕實際尺寸。
Android講屏幕實際尺寸分爲3個通用的尺寸。
   
   2.Aspect ratio 長寬比

   3.Resolution 分辨率

   4.Density 密度

   5.Density-independent pixel 密度無關的像素

介紹:Adnroid1.6或以上SDK,在AndroidManifest.xml中提供新的一個元素<supports-screens>用於支持多屏幕機制。
<supports-screens 
          android:largeScreens="true"   是否支持大屏
          android:normalScreens="true"  是否支持中屏
          android:smallScreens="true"   是否支持小屏
          android:anyDensity="true"     是否支持多種不同密度
/> 
Android提供3種方式處理屏幕自適應
一.預縮放的資源(基於尺寸和密度去尋找圖片)
1.如果找到相應的尺寸和密度,則利用這些圖片進行無縮放小時。
2.如果沒法找到相應的尺寸,而找到密度,則認爲該圖片尺寸爲 "medium",利用縮放這個圖片顯示。
3.如果都無法匹配,則使用默認圖片進行縮放顯示。默認圖片默認標配 "medium" (160)。

二.自動縮放的像素尺寸和座標(密度兼容)
1.如果應用程序不支持不同密度android:anyDensity="false",系統自動縮放圖片尺寸和這個圖片的座標。
  (代碼中體現)
2.對於預縮放的資源,當android:anyDensity="false",也不生效。
3.android:anyDensity="false",只對密度兼容起作用,尺寸兼容沒效果

三.兼容模式顯示在大屏幕,尺寸(尺寸兼容)
1.對於你在<supports-screens>聲明不支持的大屏幕,而這個屏幕尺寸是normal的話,系統使用尺寸爲    ("normal")和密度爲("medium)顯示。

2. 對於你在<supports-screens>聲明不支持的大屏幕,而這個屏幕尺寸是larger的話,系統同樣使用尺寸爲                   ("normal")和密度爲("medium)顯示,不過會出現一層黑色的背景。不是居中顯示。

密度獨立:
系統默認應用支持DIP單位的,三個使用DIP的地方:
1.加載資源時,使用DIP實現預縮放的資源。
2.在Layout使用DIP,系統自動完成縮放。
3.在應用程序中,自動縮放一些絕對像素。
    (只有在android:anyDensity="false"生效)即屏幕自適應方式二
4.像素單位都使用DIP,文本單位使用SP

最佳屏幕獨立實踐:
1.使用wrap_content, fill_parent 和使用dip作爲像素單位in XML layout files。
2.避免使用AbsoluteLayout 
3.在代碼中,不要使用像素數字硬編碼,而是要通過dip轉換爲px。
    例子:
   你使用手勢分析器分析一個scroll手勢,假如,你滾動的距離是16px。
1.在一個160dip的屏幕中,你實際移動距離 16px / 160dpi = 1/10th of an inch (or 2.5 mm)
2.在一個240dip的屏幕中,你實際移動距離 16px / 240dpi = 1/15th of an inch (or 1.7 mm)
  // The gesture threshold expressed in dip 
  private static final float GESTURE_THRESHOLD_DIP = 16.0f; 
  // Convert the dips to pixels 
  final float scale = getContext().getResources().getDisplayMetrics().density; 
  mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale); 
4.使用密度和/或尺寸特定資源(通過文件夾)


關於預縮放或者自動縮放圖片或9格圖
1.系統是一定對會資源包下的圖片進行合理的縮放。
   例如:一張240x240高密度圖片,顯示在中密度的屏幕上,圖片大小自動變爲160x160。
2.你在API中不會得到被縮放後的圖片尺寸,得到還是你原來圖片的尺寸。
3.如果你不想系統自動幫你縮放圖片,可以建立一個res/drawable-nodpi文件夾,存放你的圖片。
4.也可以通過BitmapFactory.Options 完成系統自動縮放圖片或9格圖(在畫圖時)。
5.自動縮放圖片比預縮放花費更多CPU,但是用更少內存(RAM or ROM ?)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章