在Android的实际开发中,会经常用到获取屏幕的尺寸的问题,以便设置一些布局在屏幕上的固定位置,从而适配各个屏幕的设备。

今天我就来讲一下怎么得到当前设备的屏幕像素吧:

一、在Activity中:

Display display = getWindowManager().getDefaultDisplay();//得到当前屏幕的显示器对象
Point size = new Point();//创建一个Point点对象用来接收屏幕尺寸信息
display.getSize(size);//Point点对象接收当前设备屏幕尺寸信息
int width = size.x;//从Point点对象中获取屏幕的宽度(单位像素)
int height = size.y;//从Point点对象中获取屏幕的高度(单位像素)
Log.v("zxy", "width="+width+",height="+height);//width=480,height=854可知手机的像素是480x854的

二、不在Activity中:

通过WINDOW_SERVICE对象获得默认的Display对象

WindowManager wm = (WindowManager) Context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();//然后获得屏幕像素就和第一个方法的一样了

三、如果没有getSize()方法,就通过getWidth()和getHeight()来获得,因为getSize()是新API引入的:

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();  // 获得宽度像素
int height = display.getHeight();  // 获得屏幕高度像素

上面这些代码,就是获得屏幕的尺寸信息的,然后可以通过所获取的宽度或高度去乘以一个百分比来设置一个控件的宽高,从而达到适配的作用。

当然还有一种方式获得屏幕的像素的,就是通过DisplayMetrics对象来获得,这个的意思就是获得一个界面度量对象,用来获得当前屏幕的高和宽,实现方式如下:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;//获得屏幕高度
int width = metrics.widthPixels;//获得屏幕宽度

好了,获取屏幕的像素大小就说到这了,顺便补充一个常用的开发技术:

获取状态栏和标题栏的高度

废话不多说,直接贴代码吧:

Rect frame = new Rect();//创建一个空的矩形对象
getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);//获得顶层窗口的装饰视图,即状态栏,然后把状态栏显示的框架填充给刚刚我们创建的矩形对象,再通过矩形对象来获取状态栏高度
int statusBarHeight = frame.top;// 获取状态栏高度:frame.top
Log.v("zxy1", statusBarHeight+"");//打印出来的值为:38,即状态栏高度为38px
View v = getWindow().findViewById(Window.ID_ANDROID_CONTENT);// /获得根视图,
int allHeight = v.getTop();// 状态栏和标题栏的总高度

这样我们就获取了状态栏和状态栏加标题栏的总高度了,那么,显而易见,标题栏的高度就是用总高度减去状态栏的高度即可!!!【注】android屏幕都是以像素为单位的,进行相关计算或者设置宽高时注意转化单位,这里给出一个dp转px的方法:

public int Dp2Px(Context context, float dp) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dp * scale + 0.5f);
	}

直接拿来用就行啦~~~

转载请注明出处---------

最新文章

  1. ViewPager中Fragment切换过程不被销毁的方法
  2. velocity模板引擎学习(1)
  3. java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet的解决方案
  4. js一些平时会用到的
  5. SHELL中,如何分割字符串
  6. CodeForces 719B Anatoly and Cockroaches 思维锻炼题
  7. git 提交代码到库
  8. json、demjson
  9. Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号
  10. n个随机变量中第k小值的期望
  11. 【Linux学习八】脚本编程
  12. LoadRunner做性能测试 从设计到分析执行
  13. 隐马尔可夫(HMM)
  14. C#中int? 转换为 int 型
  15. Python 面试题学习
  16. UVa 1662 Brackets Removal
  17. [转].Net Windows服务安装完成后自动启动
  18. [数位DP]把枚举变成递推(未完)
  19. Luogu4926 倍杀测量者(二分答案+差分约束)
  20. 驱动之SPI,UART,I2C的介绍与应用20170118

热门文章

  1. spoj 1676 AC自动机+矩阵快速
  2. hdu 5505(GT and numbers)
  3. [BZOJ]1017 魔兽地图DotR(JSOI2008)
  4. spring boot新建项目问题总结
  5. WebDNN:Web浏览器上最快的DNN执行框架
  6. JVM Class字节码之三-使用BCEL改变类属性
  7. 手写JAVA虚拟机(三)——搜索class文件并读出内容
  8. Day 1 Python简单程序
  9. 566. Reshape the Matrix
  10. Vue国际化处理 vue-i18n 以及项目自动切换中英文