Android正確獲取屏幕像素和密度等

Android如何準確獲取屏幕寬高、密度。

需要注意在不同版本有點區別,4.2增加虛擬導航欄,導致舊的方法獲取的屏幕高度不包括導航欄。所以需要區分版本去獲取。

順便提下,

這貨WindowManager windowManager = activity.getWindowManager()

跟這貨WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

進去看下源碼就知道,其實是一樣的。只不過在Activity下才有這方法getWindowManager。

package com.dway.common.utils;

import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.WindowManager;

/**
 * 獲取屏幕的寬高像素和密度等工具類
 */

public class DisplayUtil {
    private static final String TAG = "DisplayUtil";

    public static DisplayMetrics getDisplayMetrics(Activity activity){
        DisplayMetrics displayMetrics = new DisplayMetrics();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            //4.2開始有虛擬導航欄,增加了該方法才能準確獲取屏幕高度
            activity.getWindowManager().getDefaultDisplay().getRealMetrics(displayMetrics);
        }else{
            activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
            //displayMetrics = activity.getResources().getDisplayMetrics();//或者該方法也行
        }
        return displayMetrics;
    }

    public static DisplayMetrics getDisplayMetrics(Context context){
        WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics displayMetrics = new DisplayMetrics();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
        }else{
            windowManager.getDefaultDisplay().getMetrics(displayMetrics);
        }
        return displayMetrics;
    }

    public static void printDisplayMetrics(Activity activity){
        DisplayMetrics displayMetrics = getDisplayMetrics(activity);
        Log.v(TAG,"---printDisplayMetrics---" +
                "widthPixels=" + displayMetrics.widthPixels
                + ", heightPixels=" + displayMetrics.heightPixels
                + ", density=" + displayMetrics.density
                + ", densityDpi="+displayMetrics.densityDpi);
    }

    public static void printDisplayMetrics(Context context){
        DisplayMetrics displayMetrics = getDisplayMetrics(context);
        Log.v(TAG,"---printDisplayMetrics---" +
                "widthPixels=" + displayMetrics.widthPixels
                + ", heightPixels=" + displayMetrics.heightPixels
                + ", density=" + displayMetrics.density
                + ", densityDpi="+displayMetrics.densityDpi);
    }

}

 

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