一般的方法
在 Android 1.6 版以後,可以使用 config.screenLayout 語句來判斷螢幕大小
Configuration config = getResources().getConfiguration();
if((config.screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){
}
UPDATE 2010/4/14: sam 說 「config = new Configuration()」只會回傳預設的Configuration, 而非當前的Configuration. 找了一下最好是使用 getResources().getConfiguration()
支援的參數與代碼如下
- Configuration.SCREENLAYOUT_SIZE_UNDEFINED 0
- Configuration.SCREENLAYOUT_SIZE_SMALL 1
- Configuration.SCREENLAYOUT_SIZE_NORMAL 2
- Configuration.SCREENLAYOUT_SIZE_LARGE 3
要檢查點距,可以使用 DisplayMetrics 語句來判斷螢幕點距
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
if((dm.densityDpi == dm.DENSITY_HIGH)){
}
支援的參數與代碼如下- DENSITY_HIGH 240 (dpi)
- DENSITY_MEDIUM 160
- DENSITY_LOW 120
- DENSITY_DEFAULT 160
相容 1.5 以下機型
根據Android 版本使用圖表,2010年1月時 Android 1.5 市佔率還是接近 1/3,但是這1/3的機器上並無法使用上面的API。
在 1.5 版上,其實仍然可以用 density 語句來判斷螢幕點距比率
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
if((dm.density >= 1.5)){
}
density 的值 1 代表一般點距,1.5 代表高點距,0.75代表低點距。要偵測市面上所有的機器是否是高解析度機型,只要運用以上方法,就可以自動偵測出螢幕大小和點距囉。
4 意見:
resolution 和 density 並沒有直接的關係,WVGA(480x800)的面板也可作大一些,這樣 density 就可能依然是 160 DPI 而不是 240 DPI。
所以用上述的方法會有可能在大面板的 android 造成誤判,不過目前好像還沒有大面板的 android 上市就是了...
詳細可參考 http://developer.android.com/intl/zh-TW/guide/practices/screens_support.html
我最近剛好也在研究,有錯請指正,謝謝 :p
By Todd
樓上是對的,我修改了一下原文的描述,這篇主要目標就是偵測市面上包含 1.5 版的機型 :D
想請問這段(config.screenLayout& Configuration.SCREENLAYOUT_SIZE_MASK)該怎麼解讀呢?
在developer.android.com上找不到這個說明
謝謝~
我是使用
getWindowManager().getDefaultDisplay().getMetrics(metrics);
然後取得 metrics.widthPixels 和 metrics.heightPixels
不過看到有些回應說這方法在某些手機上無效 -_-
Post a Comment