Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android初級教程:屏幕分辨率

Android初級教程:屏幕分辨率

編輯:關於Android編程

在app編碼中經常需要獲取手機的屏幕分辨率(寬*高),原來我直接上網拷貝代碼,但在使用過程中卻發現諸多不便。

不便一:下面代碼中的getWidth和getHeight在adt上提示deprecated已經廢棄了,實在扎眼

 

WindowManager wm = getWindowManager();      
Display display = wm.getDefaultDisplay();     
int screenWidth = display.getWidth();      
int screenHeight = display.getHeight(); 


查看android源碼說可使用getSize替代,於是換成getSize並把代碼提煉到工具類中
    public static Point getSize(Activity act) {  
        Display display = act.getWindowManager().getDefaultDisplay();  
        Point size = new Point();  
        display.getSize(size);  //size.x就是寬度,size.y就是高度  
        return size;  
    }  

用了一陣發現又有不便,原因是getWindowManager方法只能在activity中使用或者被activity實例調用,那像我們在Fragment或者Adapter中想獲得屏幕分辨率,又有困難了(因為Fragment和Adapter一般只有Context),雖然可以通過強制類型轉換來處理,可是畢竟勞民傷財需要時時記得去轉換。所以又改了從Context獲取系統服務,然後再去取分辨率,改後的代碼如下
    public static Point getSize(Context ctx) {  
        WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  
        Display display = wm.getDefaultDisplay();  
        Point size = new Point();  
        display.getSize(size);  
        return size;  
    }  

再後來發現通過DisplayMetrics也能獲取分辨率,依網上的做法照貓畫虎如下:
    public static Point getSizeNew(Context ctx) {  
        WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  
        DisplayMetrics dm = new DisplayMetrics();  
        wm.getDefaultDisplay().getMetrics(dm);  
        Point size = new Point();  
        size.x = dm.widthPixels*dm.density;  
        size.y = dm.heightPixels*dm.density;  
        return size;  
    }  

不就便發現這個新方法時常量錯了,找來找去又自己反復實踐,結果確認widthPixels和heightPixels就是寬和高,無需再乘上density。因為widthPixels和heightPixels的單位都是像素,而density指的是像素密度,即一個單位內有幾個像素,所以在我這邊乘上density沒有意義,只有除以density才有意義。dm.widthPixels/dm.densit指的是寬度上有多少單位,dm.heightPixels/dm.density指的是高度上有多少單位。網上乘上density的做法,可能只是他們恰好遇上部分特殊機型罷了。最後的代碼如下
    public static Point getSizeNew(Context ctx) {  
        WindowManager wm = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);  
        DisplayMetrics dm = new DisplayMetrics();  
        wm.getDefaultDisplay().getMetrics(dm);  
        Point size = new Point();  
        size.x = dm.widthPixels;  
        size.y = dm.heightPixels;  
        return size;  
    }  

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved