Android屏幕信息获取

Android中有时需要获取屏幕的size信息以便对控件位置进行动态控制,最近做了一些研究,现在将获取屏幕大小信息的方法总结如下,可能存在一些地方理解的不全面。

 

1.getMetrics

 

Java代码  收藏代码
  1. DisplayMetrics dm = new DisplayMetrics();  
  2. activity.getWindowManager().getDefaultDisplay().getMetrics(dm);  
  3. //在没有Activity上下文时可使用如下方法,需要Context上下文  
  4. //dm = context.getResources().getDisplayMetrics();  
  5. int screenwidth = dm.widthPixels;// 宽度  
  6. int screenheight = dm.heightPixels;// 高度  

该方法获取到的是屏幕的实际大小(即屏幕的分辨率)。然而在API 11(Android 3.0)后,Google为了减少碎片化的问题统一了标准,建议删除手机的实体键。于是现在多数手机已经不再有实体按键,OptionsMenu通常被挪至右上角。但当应用的Target API设置为11或以下版本时,应用会在底部生成一个虚拟的menu按键,如果想要获取去除该按键区域的实际显示区域的信息,用以上的方法就不可行了。查找文档,android.view.Display下存在另一个函数getRealMetrics来获取实际显示区域

 

 

2.getRealMetrics(注意,该方法仅在API 17以上可用)

 

Java代码  收藏代码
  1. DisplayMetrics dm = new DisplayMetrics();  
  2. activity.getWindowManager().getDefaultDisplay().getRealMetrics(dm);  
  3. int displaywidth = dm.widthPixels;// 宽度  
  4. int displayheight = dm.heightPixels;// 高度  

该方法返回的信息去除了上面提到的虚拟按键部分(这部分被称为decor view),但是该方法获得的区域仍然包括状态栏。那么如何获取实际上真正的显示区域呢?

 

 

3.getWindow().getDecorView().getWindowVisibleDisplayFrame(Rect)

 

Java代码  收藏代码
  1. Rect rect = new Rect();  
  2. activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);  

 通过该方法获取到的Rect就是整个实际显示的区域,也即rect.top即为状态栏的高度,screenheight - rect.bottom即为底部虚拟按键的高度。在其他部分显示区域被遮挡的情况下(例如输入的软键盘弹出时),该方法获得的区域会相应变化。

 

注:所有方法获得的size信息单位均为px

posted @   brave-sailor  阅读(2121)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2014-02-13 ExpandableListView 箭头靠右
点击右上角即可分享
微信分享提示