android獲取屏幕尺寸、密度(判斷手機屏幕類型)

  這兩天編程遇到一個問題,我的地圖浮標圖片在WVGA手機上正好,在QVGA上就顯的太大,所以我要根據屏幕的不同調整浮標的大小使其在QVGA大小合適。有的同事提出了依據分辨率來區分不同的屏幕,但是單WVGA就支持好幾種不同的分辨率,QVGA又支持好幾種。。。而且更神奇的時候,有時候,通過代碼獲取屏幕分辨率竟然得到了 320x 427 ,Android文檔是不支持這種分辨率的,所以依據分辨率來區分不同的屏幕是行不通的。
還好通過仔細研讀文檔,“各種VGA的density是不同的,(hdpi: 240 ,ldpi: 120 , mdpi: 160 , xhdpi:320)”,所以只要求出不同屏幕的density,就可以知道該手機屬於的屏幕類型。

   在一個Activity的onCreate方法中,寫入如下代碼:
 
       DisplayMetrics metric = newDisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);
        int width= metric.widthPixels;  //屏幕寬度(像素)
        int height= metric.heightPixels;  //屏幕高度(像素)
        floatdensity =metric.density;  //屏幕密度(0.75 / 1.0 / 1.5)
        intdensityDpi = metric.densityDpi;  //屏幕密度DPI(120 / 160 / 240)

 
   但是,需要注意的是,在一個低密度的小屏手機上,僅靠上面的代碼是不能獲取正確的尺寸的。比如說,一部240x320像素的低密度手機,如果運行上述代碼,獲取到的屏幕尺寸是320x427。因此,研究之後發現,若沒有設定多分辨率支持的話,Android系統會將240x320的低密度(120)尺寸轉換爲中等密度(160)對應的尺寸,這樣的話就大大影響了程序的編碼。所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens節點,具體的內容如下:
        <supports-screens
            android:smallScreens="true"
            android:normalScreens="true"
            android:largeScreens="true"
            android:resizeable="true"
            android:anyDensity="true"
/>

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