方法一:getDefaultDisplay().getH/W() 计算结果的单位是 PX
int screenWidth1 = getActivity().getWindowManager().getDefaultDisplay().getWidth();
int screenHeight1 = getActivity().getWindowManager().getDefaultDisplay().getHeight();
方法二:getResources().getDisplayMetrics().H/W 可以得到计算结果单位 DPI, PX
DisplayMetrics dm2 = getResources().getDisplayMetrics();
float density = dm2.density;
int densityDPI = dm2.densityDpi;
float xdpi = dm2.xdpi;
float ydpi = dm2.ydpi;
int screenWidth2 = dm2.widthPixels;
int screenHeight2 = dm2.heightPixels;
tvScreenHeight2.setText(screenHeight2+" px");
tvScreenWidth2.setText(screenWidth2+" px");
tvScreenDensity2.setText(density+"");
tvScreenDensityDPI2.setText(densityDPI+"");
方法三:getDefaultDisplay().getMetrics(DisplayMetrics).H/W 可以得到计算结果DPI,PX ,DIP;
DisplayMetrics dm3 = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm3);
density = dm3.density;
densityDPI = dm3.densityDpi;
xdpi = dm3.xdpi;
ydpi = dm3.ydpi;
tvScreenDensity3.setText(density+"");
tvScreenDensityDPI3.setText(densityDPI+"");
int screenWidth3 = dm3.widthPixels;
int screenHeight3 = dm3.heightPixels;
tvScreenHeight3.setText(screenHeight3+" px");
tvScreenWidth3.setText(screenWidth3+" px");
float screenWidthDip = (dm3.widthPixels/density);
float screenHeightDip = (dm3.heightPixels/density);
tvScreenHeight4.setText(screenHeightDip+" dip");
tvScreenWidth4.setText(screenWidthDip+" dip");
另附各单位转换方法:
dip : device independent pixels ,设备无关像素。 我看很多帖子写的五花八门的,关于d的,什么display啊各种都有,既然是设备无关,我还是觉得device靠谱。
dp就是dip
dpi : dots per inch , 直接来说就是一英寸多少个点。常见取值 120,160,240。 我一般称作像素密度,简称密度density : 直接翻译的话貌似叫 密度。常见取值 1.5 , 1.0 。
分辨率: 横纵2个方向的像素点的数量,常见取值 480X800 ,320X480
屏幕尺寸: 屏幕对角线的长度。电脑电视同理。
这里还涉及另外一个问题,就是屏幕比例的问题。因为只确定了对角线长,2边长度还不一定。所以有了4:3、16:9这种,这样就可以算出屏幕边长了。
drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi,drawable-xxhdpi,这几个目录对应的pppi为
120ppi 160ppi 240ppi 320ppi 480ppi
density 屏幕密度
desityDpi
px(pixels) 像素
dip
density = densityDpi/160
px(pixels) = dip * (densityDpi/160) = dip*density
dip(device independent pixels) = dp
dip = (px * 160)/densityDpi = px / density