当前位置: 移动技术网 > IT编程>移动开发>Android > Android开发 获取屏幕宽高及尺寸的方法

Android开发 获取屏幕宽高及尺寸的方法

2018年09月17日  | 移动技术网IT编程  | 我要评论

高少华 让一切随风,奇彩鱼大豆油,网络知识

android开发 获取屏幕宽高及尺寸的方法。

 // 通过windowmanager获取
        displaymetrics dm = new displaymetrics();
        getwindowmanager().getdefaultdisplay().getmetrics(dm);
        system.out.println("width-display :" + dm.widthpixels);
        system.out.println("heigth-display :" + dm.heightpixels);

// 通过resources获取
        displaymetrics dm2 = getresources().getdisplaymetrics();
        system.out.println("width-display :" + dm2.widthpixels);
        system.out.println("heigth-display :" + dm2.heightpixels);

// 获取屏幕的默认分辨率
        display display = getwindowmanager().getdefaultdisplay();
        system.out.println("width-display :" + display.getwidth());
        system.out.println("heigth-display :" + display.getheight());

以上为获取屏幕宽高分辨率的三种方法

安卓6.0的nexus 6手机使用以上方法取得准确的宽度分辨率,但是高度分辨率并不准确(与状态栏和主题有关,某些情况下准确),如何获取完全准确的宽、高分辨率请参考下文;在安卓4.2的某手机中,使用方法一得到了正确的屏幕尺寸值,而使用方法二和三得到的值全部为零。原因不祥。其中方法三中的display.getwidth()和display.getheight()已被弃用。


[java]view plaincopy

displaymetricsdm=newdisplaymetrics();

getwindowmanager().getdefaultdisplay().getmetrics(dm);

//display=getwindowmanager().getdefaultdisplay();

//display.getmetrics(dm)(把屏幕尺寸信息赋值给displaymetricsdm);

width=dm.widthpixels;

height=dm.heightpixels;

xdpi=dm.xdpi;

ydpi=dm.ydpi;

density=dm.densitydpi;

fdensity=dm.density;
查询log,得到各值如下:
d/lichking(22643): -----------widthpixels---540
d/lichking(22643): -----------heightpixels---960
d/lichking(22643): -----------xdpi---244.92857
d/lichking(22643): -----------ydpi---246.30302
d/lichking(22643): -----------density---240
另提一点,我们通常所指的屏幕上的int尺寸是像素单位,如需在java代码中使用dp设定宽高请参考以下两个方法。 [java]view plaincopy

//pixel=dip*density;

privateintconvertdptopixel(intdp){

displaymetricsdisplaymetrics=mcontext.getresources().getdisplaymetrics();

return(int)(dp*displaymetrics.density);

}

privateintconvertpixeltodp(intpixel){

displaymetricsdisplaymetrics=mcontext.getresources().getdisplaymetrics();

return(int)(pixel/displaymetrics.density);

}

由于根据以上方法获取屏幕尺寸会有部分情况因为状态栏或其他缘故获取不到正确的分辨率,所以获取准确的分辨率可用以下方式获得:

[java]view plaincopy

privatevoidgetdisplayinfomation(){

pointpoint=newpoint();

getwindowmanager().getdefaultdisplay().getsize(point);

log.d(tag,"thescreensizeis"+point.tostring());

//获取正确尺寸(此方法要求最低api为17,即安卓4.2,4.2之前获取请参看以下获取屏幕尺寸的方法)

getwindowmanager().getdefaultdisplay().getrealsize(point);

log.d(tag,"thescreenrealsizeis"+point.tostring());

}

获取屏幕尺寸的方法如下:

[java]view plaincopy

privatestaticdoubleminch=0;

/**

*获取屏幕尺寸

*@paramcontext

*@return

*/

publicstaticdoublegetscreeninch(activitycontext){

if(minch!=0.0d){

returnminch;

}

 

try{

intrealwidth=0,realheight=0;

displaydisplay=context.getwindowmanager().getdefaultdisplay();

displaymetricsmetrics=newdisplaymetrics();

display.getmetrics(metrics);

if(android.os.build.version.sdk_int>=17){

pointsize=newpoint();

display.getrealsize(size);

realwidth=size.x;

realheight=size.y;

}elseif(android.os.build.version.sdk_int&&android.os.build.version.sdk_int>=14){
methodmgetrawh=display.class.getmethod("getrawheight");

methodmgetraww=display.class.getmethod("getrawwidth");

realwidth=(integer)mgetraww.invoke(display);

realheight=(integer)mgetrawh.invoke(display);

}else{

realwidth=metrics.widthpixels;

realheight=metrics.heightpixels;

}

minch=formatdouble(math.sqrt((realwidth/metrics.xdpi)*(realwidth/metrics.xdpi)+(realheight/metrics.ydpi)*(realheight/metrics.ydpi)),1);

 

}catch(exceptione){

e.printstacktrace();

}

 

returnminch;

}

/**

*double类型保留指定位数的小数,返回double类型(四舍五入)

*newscale为指定的位数

*/

privatestaticdoubleformatdouble(doubled,intnewscale){

bigdecimalbd=newbigdecimal(d);

returnbd.setscale(newscale,bigdecimal.round_half_up).doublevalue();

}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网