1. 程式人生 > >Android手機獲取螢幕解析度高度因虛擬導航欄帶來的問題

Android手機獲取螢幕解析度高度因虛擬導航欄帶來的問題

大家都知道,Android系統在4.4(KITKAT)版本後,增加了更炫的互動,並且對於標題欄和狀態列也增加了可定製化,於此同時在獲取手機解析度的時候一些舊方法已經不那麼好使了。

常用獲取螢幕解析度的方法,現在網上大部分找出來的都是這個吧

    Context context = getApplicationContext();
    DisplayMetrics localDisplayMetrics = context.getResources().getDisplayMetrics(); 
    // 獲取高度
    int height = localDisplayMetrics.heightPixels;
    // 獲取寬度
int width = localDisplayMetrics.widthPixels;

例如,在一部解析度為1280*720帶虛擬導航欄的華為手機上,並且手機系統在4.4之後,通過上面的方法獲取到的手機解析度為1184*720,沒錯,是1184,難道是系統api獲取到的值不準確?但其實是你手機的虛擬導航欄搞的鬼,如果這時候你將導航欄隱藏起來,再呼叫上面的方法就可以獲得和手機對應的解析度一樣的值了。

問題總是有解決方法的,在檢視官方文件後,發現其實早在4.2的系統,Google就更新了獲取解析度的方法,使用新的方法,無論手機的虛擬導航欄或標題欄是否顯示隱藏都可以正確獲取解析度

    Context context = getApplicationContext();
    DisplayMetrics dm = new DisplayMetrics();
    WindowManager windowMgr = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
    windowMgr.getDefaultDisplay().getRealMetrics(dm);
    // 獲取高度
    int height = dm.heightPixels;
    // 獲取寬度
    int width = dm.widthPixels
;

不過需要注意的是,在4.2系統之前使用這個方法可是會報錯的哦,所以還是加上版本判斷吧。