Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android DisplayMetrics(適應多屏幕分辨率)

Android DisplayMetrics(適應多屏幕分辨率)

編輯:關於Android編程

前言          歡迎大家我分享和推薦好用的代碼段~~ 聲明          歡迎轉載,但請保留文章原始出處:          CSDN:http://www.csdn.net          雨季o莫憂離:http://blog.csdn.net/luckkof 正文   一、起因 為了適應多屏幕分辨率,可以在res目錄下建立不同的layout文件,例如想適應C8500(320*240)和Milestone(854*480),可以在res目錄下建立layout-320*240和layout-854*480兩個目錄,然後在其中定義不同的布局文件就可以了;但在實際中並沒有湊效;這是為什麼呢; 在真機下調試才發現有問題,Android有個類DisplayMetrics可以得到分辨率等信息,方法如下: DisplayMetrics metrics;getWindowManager().getDefaultDisplay().getMetrics(metrics); metrics.widthPixels           屏幕寬 metrics.heightPixels          屏幕高 metrics.density                  屏幕密度 其它用不到的屬性就不寫了,調試中發現C8500得到的是427*320,而而Milestone得到是569*320;這是為什麼呢?難道是Android API有問題? 二、探索 實際上是自己對Android多屏幕分辨率理解不深刻,那麼問題出在哪兒呢?這裡需要用到一個公式pixels = dps * (density / 160),在SDK中有提到,需要說明一點公式中的density與metrics.density不是一個東西,它們的關系是:metrics.density = density / 160,density的值有120、160、240、320(這在SDK中也有說明);好了直接套用公式就OK了C8500實際分辨率為320*240,密度(也就是metrics.density的值)為0.75,用公式算出來正好是427*320;Milestone實際分辨率是854*480,密度是1.5,算出來是569*320(有四捨五入的); 好吧,按照以上的結論直接在res目錄下建立layout-427*320和layout-569*320;分別編寫不同的布局文件,OK!問題解決,終於可以適應兩個手機屏幕了。 三、沒有結束…… 真的就這麼搞定了嗎?似乎沒有,把AndroidManifest.xml中android:minSdkVersion=”3″(一直都是3),中3改為4,問題又來了,界面又亂了,在兩個手機都亂了;怎麼回事呢?再調試,我那個暈,C8500手機屏幕分辨率又變了,變回320*240,套用上面的公式反而又錯了,程序又找不到布局文件了,界面自然就亂了,這是WHY   WHY   WHY???? 別著急,再來看看問題出在哪兒。查找SDK,加上自己對Android多分辨率的支持的理解,真正的原因應該是當android:minSdkVersion=”3″時也就是此時支持android1.5,在 Android 1.5以及更早的版本中,只支持3.2″ 屏幕上的HVGA (320×480)分辨率,開發人員也不需要考慮界面的適配性問題。從Android 1.6之後,平台支持多種尺寸和分辨率的設備,這也就意味著開發人員在設計時要考慮到屏幕的多樣性。 由此可見,在android:minSdkVersion=”3″時,還沒有多分辨率的概念,因而此時,DisplayMetrics得到的寬和高是與密度相關的,也就是說此時得到的寬和高都是以dp或dip為單位的,要轉換成px才是我們通常據說的分辨率。自android1.6及以後,DisplayMetrics得到的寬和高都是以px為單位的,不需要轉換。 總結一下:android的兼容性意味著應用程序api的降級。api的降級意味著在高端機(版本高配置高)上的顯示效果配不上。  
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved