通過WindowManager獲取
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
//其中display = getWindowManager().getDefaultDisplay() 獲得了一個DefaultDisplay對象; 然后 display.getMetrics(dm) 把屏幕尺寸信息賦值給DisplayMetrics dm
//注意:WindowManager有時候需要通過context莲祸。getSystemService獲取:WindowManager wm = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);
DisplayMetrics和Display的關(guān)系圾另。;
Display指代顯示區(qū)域這個對象,它可能是真實的物理屏幕筋夏,也可能僅指應(yīng)用程序的顯示區(qū)域辆沦,比如在非全屏Activity里权烧,系統(tǒng)因為有狀態(tài)欄,因此顯示區(qū)域要比物理屏幕要小檐束。DisplayMetrics里封裝了顯示區(qū)域的各種屬性值辫秧。查看源碼發(fā)現(xiàn),在DisplayMetrics對各個屬性值的注釋都說明為真實的物理尺寸被丧。而且也發(fā)現(xiàn)display.getMetrics(dm)這一函數(shù)基本在應(yīng)用在獲取真實屏幕尺寸的時候盟戏。記住這一點即好。
注:構(gòu)造函數(shù)DisplayMetrics不需要傳遞任何參數(shù)甥桂;調(diào)用getWindowManager()之后柿究,會取得現(xiàn)有Activity的Handle。然后黄选,diplay將取得的寬高維度存放于DisplayMetrics對象中蝇摸,而取得的寬高維度是以像素為單位(Pixel),“像素”所指的是“絕對像素”而非“相對像素”办陷。
通過DisplayMetrics對象dm可以獲得如下信息
width = dm.widthPixels;
height = dm.heightPixels;
xdpi = dm.xdpi;
ydpi = dm.ydpi;
density = dm.densityDpi;
fdensity = dm.density;